.NET分布式系统架构

搭建一个大型平台需要综合考虑很多方面,不单纯是软件架构,还包括网络和硬件设备等。由于现代大部分应用建设都面临用户多、高并发、高可用的需求,传统软件架构已不能满足需求,需要支持分布式软件架构,能支持横向扩展,具有高可用、伸缩性、稳定性等特点。搭建如下系统架构。

二、系统软件结构

系统软件结构示意图

系统基于SOA架构设计,系统整体划分为不同组件或者应用服务,支持分布式的部署及扩展,并通过Nginx组件实现负载均衡。根据逻辑关联划分为:表现层、应用层和数据层。表现层负责系统与用户或者外部系统交互;应用层是服务于表现层,主要实现业务逻辑处理满足表现层的需求;数据层是负责系统数据的存储。

2.1、表现层

2.2、应用层

主要负责系统逻辑计算的实现,提供服务接口给展现层使用。此两层之间通信基于系统内部局域网tcp/ip协议,为了提高数据传输效率。根据应用服务职责不同,将分两大类,分别为业务应用服务和基础应用服务。业务应用服务实现业务需求的功能服务,比如用户

订单、某类商品的管理功能等。基础应用服务实现系统基础公用的功能服务,比如:日志服务、缓存服务、用户认证服务功能等。本系统应用服务一般使用.NET平台的通信框架WCF技术实现,个别其他组件除外,比如MQ组件、Redis缓存组件。

2.3、数据层

主要负责系统数据存储、同步、缓存和备份管理。本系统数据分为结构化数据和非结构化数据。对于结构化数据使用MSSQL2008以上数据库存储,基于MSSQL复制同步的机制,可以进行数据读写分离的实现,提升数据层面的优化。对于本系统业务日志数据的存

储选型,由于考虑到业务日志数据结构多样化、数据量较大,所以选用MongoDB的NoSQL技术,同时系统面对着高并发的访问,采取了缓存的机制提升性能,选用Redis缓存组件实现数据缓存存储。对于非结构化数据存储,比如文档、图片等数据,本系统基于

Windows平台NTFS文件系统实现文档存储和读写功能。

三、系统物理结构

系统物理结构示意图

为负载均衡服务器、Web服务器、应用服务器、数据服务器四大类。

(1)负载均衡服务器

基于Linux之CentOS平台搭建Nginx服务,作LoadBalance。

(2)Web服务器

基于window平台下IISweb服务器。部署基于asp.netmvc、webapi技术实现的程序。

(3)应用服务器

部署基于.net平台通信框架之WCF技术实现的服务接口,提供与展现层调用,其中部分公用组件,如MQ则根据组件的要求部署。

(4)数据服务器

本系统数据存储选用:mssql数据库、MongoDB、Redis缓存和文件存储。根据项目情况数据库可做读写分离,同时结合redis做缓存策略提高系统性能。

本章节先大致介绍系统框架及物理结构情况,由于涉及几个技术点,比如:nginx负载均衡搭建、asp.netmvc与WCF服务之间调用、redis分布式缓存使用、MongoDB存储日志、MQ异步传输日志数据、文件服务实现。后续逐步介绍。

3.1.1、关于CentOS系统介绍

CentOS(CommunityEnterpriseOperatingSystem,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于RedHatEnterpriseLinux依照开放源代码规定释出的源代码所编译而成。基于RedHat持续升级,和对已知BUG修复,所以CentOS更多

用于搭建大型企业级服务器。目前较新版本为7.0,本文使用CentOS764bit进行搭建系统负载均衡。

3.1.2、安装VMWare

VMWare(VirtualMachineware)是一个“虚拟PC”软件公司.它的产品可以使你在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比,VMWare采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时

3.1.3、安装CentOS系统

注意事项:

1、分区的时候,选择EXT4格式,boot分区为400m,/分区为8G,/home分区为7G,var分区为6G,swap分区为2G

2、用户和组ID,都设为1000

3、安装完成重启后提示License的,输入:1、2、r、yes完成进入成功进入系统

4、ctrlalt鼠标切回本机电脑,不在虚拟机里

3.1.4、安装Nginx和配置

1、Nginx介绍

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。由俄罗斯的工程师IgorSysoev研发,供俄国大型的入口网站Rambler使用。其特点是占有内存少,并发能力强,事实上nginx的并

发能力确实在同类型的网页服务器中表现较好。

2、安装部署

(1)添加Nginx仓储,添加epelrepository

sudoyuminstallepel-release(2)检查是否已安装过nginx

find-namenginx(3)如果有安装则删除

yumremovenginx(4)安装nginx

sudoyuminstallnginx(5)启动nginx

sudosystemctlstartnginxsudosystemctlenablenginx#可用(6)将nginx设置为启动系统自动启动nginx

echo'/usr/local/nginx/sbin/nginx'>>/etc/rc.local(7)查看本机IP,为了后续配置nginx.conf所用

ifconfig(8)修改nginx.conf配置文件

cd/etc/nginx/#定位到nginx安装目录vimnginx.conf#通过vim打开nginx.conf配置文件进行配置(9)主要配置节点,192.168.119.1:8081和192.168.119.1:8082分别部署在IIS7的两个ASP.NETMVC开发的站点(在另一台电脑),设计软件架构解决方案后续介绍。

servicenginxrestart以上记录在CentOS7操作系统搭建Nginx负载均衡解决方案记录。后续简介通过Keepalived搭建Nginx负载高可用解决方案。

3.2.1、Web应用开发

1、asp.netmvc5开发

1publicActionResultIndex()2{3if(this.HttpContext.Session['mysession']==null)4{5this.HttpContext.Session['mysession']=DateTime.Now.ToString('yyyy-MM-ddhh:mm:ss');6}78this.HttpContext.Response.Cookies.Add(newHttpCookie('mycookies')9{10Expires=DateTime.Now.AddDays(1),11Value=HttpContext.Server.MachineName'||'DateTime.Now.ToString()12});13returnView();14}ViewCode(2)在Controller中新增第二个方法GetSession,显示Session和Cookies的值。

1publicActionResultGetSession()2{3if(this.HttpContext.Session['mysession']!=null)4{5ViewBag.DD=this.HttpContext.Session['mysession'].ToString();6ViewBag.SCode=this.HttpContext.Session['mysession'].GetHashCode().ToString();7ViewBag.SID=this.HttpContext.Session.SessionID;8}910ViewBag.CVAL=System.Web.HttpContext.Current.Request.Cookies['mycookies'].Value;11ViewBag.CID=System.Web.HttpContext.Current.Request.Cookies['mycookies'].Name;12ViewBag.CDO=System.Web.HttpContext.Current.Request.Cookies['mycookies'].Domain;13returnView();14}ViewCode(3)将session和cookies信息在页面显示,GetSession视图代码如下:

1@{2ViewBag.Title='GetSession';3}45

站点:A--GetSession

6站点:A7
8SessionValue:@ViewBag.DD9
10
11SessionSCode:@ViewBag.SCode12
13
14SessionID:@ViewBag.SID15
16
17CookiesID:@ViewBag.CID18
19
20CookiesValues:@ViewBag.CVAL21
22
23CookiesValues:@ViewBag.CDOViewCode以上实现session和cookies读写,为了验证负载均衡下,每次请求处理是否保持一致,接下来重要内容,做负载均衡如何如何保持session一致,对于asp.net技术session原理此处不做介绍,网上搜索下大把。

2、Session共享技术

(1)InProc模式

session存储于当前站点在同一个进程内,修改web.config或者bin中文件更新,会导致session丢失。此模式为默认模式。

(2)aspnetstate模式

aspnetstate是将session存储在状态服务中,需要启动ASP.NETStateService,能看到进程aspnet_state.exe。还需要在web.config配置此模式。

(3)SQLServer模式

(4)第三方扩展模式

本框架采用此模式,将session存储到其他存储,比如:Memcached、redis缓存中,达到共享session的目的。可以通过实现ASP.NET中的SessionStateStoreProviderBase这个抽象类扩展。本系统采用将session存储在redis缓存中,通过引入

RedisSessionStateProvider组件。

Install-PackageMicrosoft.Web.RedisSessionStateProvider3、Nginx服务状态情况在centos终端输入命令servicenginxstatus查看情况,确保服务正常运行。4、Web站点部署部署两个站点分别为:

站点A:端口为8081,

站点B:端口为8082,

二、功能效果展现

直接开启两个URL链接,确认两个网页的获取到的session和cookies都是一致。

上一篇写了nginx负载均衡,此篇实现高可用(HA)。系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行。针对系统架构设计的高可用要求,我们需要解决Nginx负载均衡出现单机故障时,系统正常运行的需求。所以系统架构引入Keepalived组件,实现系统高可用。

一、Keepalived介绍

Keepalived是分布式部署系统解决系统高可用的软件,结合LVS(LinuxVirtualServer)使用,其功能类似于heartbeat,解决单机宕机的问题。

二、Keepalived技术原理

keepalived是以VRRP协议为实现基础的,VRRP全称VirtualRouterRedundancyProtocol,即虚拟路由冗余协议。通过VRRP协议结合LVS,对组群服务器监控情况,若master出现宕机情况,则将VIP漂移到backup机上。实现了分布式系统高可用。可以理解

为:keepalived是LVS的管理软件,根据监控情况,将宕机服务器从ipvsadm移除掉。

三、KeepalivedLVSNginx实现系统高可用

消息通信组件Net分布式系统的核心中间件之一,应用与系统高并发,各个组件之间解耦的依赖的场景。本框架采用消息队列中间件主要应用于两方面:一是解决部分高并发的业务处理;二是通过消息队列传输系统日志。目前业界使用较多的消息队列组件有

RabbitMQ、ActiveMQ、MSMQ、kafka、zeroMQ等,本文对系统架构之MQComponent诠释,并采用RabbitMQ作为消息队列中间件。

一、RabbitMQ介绍

RabbitMQ是一款基于AMQP(消息队列协议),由Erlang开发的开源消息队列组件。是一款优秀的消息队列组件,他由两部分组成:服务端和客户端,客户端支持多种语言的驱动,如:.Net、JAVA、Erlang等。RabbitMQ与其他消息队列组件性能比较,在此

不作介绍,网上有大把的资料。

二、RabbitMQ原理简介

RabbitMQ中间件分为服务端(RabbitMQServer)和客户端(RabbitMQClient),服务端可以理解为是一个消息的代理消费者,客户端又分为消息生产者(Producer)和消息消费者(Consumer)。

1、消息生产者(Producer):主要生产消息并将消息基于TCP协议,通过建立Connection和Channel,将消息传输给RabbitMQServer,对于Producer而言基本就完成了工作。

2、服务端(RabbitMQServer):主要负责处理消息路由、分发、入队列、缓存和出列。主要由三部分组成:Exchange、RoutingKey、Queue。

(1)Exchange:用于接收消息生产者发送的消息,有三种类型的exchange:direct,fanout,topic,不同类型实现了不同的路由算法;

A.directexchange:将与routingkey比配的消息,直接推入相对应的队列,创建队列时,默认就创建同名的routingkey。

B.fanoutexchange:是一种广播模式,忽略routingkey的规则。

C.topicexchange:应用主题,根据key进行模式匹配路由,例如:若为abc*则推入到所有abc*相对应的queue;若为abc.#则推入到abc.xx.one,abc.yy.two对应的queue。

(2)RoutingKey:是RabbitMQ实现路由分发到各个队列的规则,并结合Binging提供于Exchange使用将消息推送入队列;

(3)Queue:是消息队列,可以根据需要定义多个队列,设置队列的属性,比如:消息移除、消息缓存、回调机制等设置,实现与Consumer通信;

3、消息消费者(Consumer):主要负责消费Queue的消息,同样基于TCP协议,通过建立Connection和Channel与Queue传输消息,一个消息可以给多个Consumer消费;

4、关键名词说明:Connection、Channel、Binging等;

(1)Connection:是建立客户端与服务端的连接。

(2)Channel:是基于Connection之上建立通信通道,因为每次Connection建立TCP协议通信开销及性能消耗较大,所以一次建立Connection后,使用多个Channel通道通信减少开销和提高性能。

三、RabbitMQ应用

本章节描述,web应用生产的日志,通过rabbitmq传输,然后日志服务接收消息队列的消息。

具体乐意产考网络,此处略过。

本文介绍系统缓存组件,采用NOSQL之Redis作为系统缓存层。

一、背景

系统考虑到高并发的使用场景。对于并发提交场景,通过上一章节介绍的RabbitMQ组件解决。对于系统高并发查询,为了提供性能减少数据库压力,我们加入缓存机制,可以不同层次加入缓存支持,本文主要介绍应用服务层和数据层之间加入缓存机制提升性能。

业界缓存组件有Redis、Memcached、MemoryCache。本系统采用Redis缓存组件,有些系统将Redis当作MQ使用,此场景本系统用RabbitMQ,Redis主要用于系统缓存应用。

二、Redis简介

Redis是一个开源的Key-Value数据库,使用C语言编写、支持网络、可基于内存亦可持久化的NOSQL数据库,并提供多种语言的API,例如:Java,C/C,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby等语言驱动。自Redis3.0开始支持集群方案。

三、Redis集群应用

(一)环境介绍

本系统基于Linux之CentOS搭建Redis3.0集群。将三个Instance部署于一台虚拟机,应用部署于windows平台。

(二)安装Redis

(三)配置Redis集群

一、背景&问题

之前框架是一个基于SOA思想设计的分布式框架。各应用通过服务方式提供使用,服务之间通信是RPC方式调用,具体实现基于.NET的WCF通信平台。框架存在如下2个问题:

1、高并发处理能力不足。一旦高并发请求,可能出现多个服务待定处理,导致整个系统出现瓶颈。

2、随着移动端广泛应用,服务不能灵活支持APP应用。

3、系统持续集成部署过于繁琐,遇到问题不好定位。

基于以上存在问题升级框架,结合当前主流的架构思想,将系统进行服务化思维,就是“微服务架构”。

二、微服务架构

微服务架构(MicroservicesArchitecture)是将系统拆分为多个服务,俗称为应用服务。应用服务实现单一、具体的业务应用功能,支持独立部署维护,多个应用服务构建成系统。应用服务之间通过轻量级通信框架进行,并且支持应用服务用不同技术或者平台实

现。微服务架构是SOA架构设计思想另一种实现方式。微服务架构有如下特点:

1、微服务架构好处

(1)横向扩展应用服务提升系统并发处理能力

(2)应用服务独立部署维护,有利于迭代开发升级持续部署

(3)架构灵活支持多种技术实现

(4)有利于应用服务实现高可用性

2、微服务架构不足

(1)对系统设计有一定要求,尤其是拆分技术应用服务接口

(2)导致系统实现复杂度的提高

(3)需要确保系统数据一致性机制

(4)导致系统维护要求和成本提高

系统是否需要采用微服务架构进行构建是由项目需求决定。采用微服务架构进行设计构建系统,对团队成员能力比传统要求高,尤其是设计能力。

三、框架设计原则

1、可扩展:支持不修改系统功能,按需扩展服务器资源。

2、高可用:支持分布式部署双机热备机制,满足系统高可用性的要求。

3、高并发:支持快捷扩张应用服务处理能力,提升系统处理能力,满足并发请求。

4、安全性:访问安全通过统一认证访问;信息安全通过加解密、签名传输;网络安全通过网络隔离及防火墙;数据安全通过定时备份及高容错能力。

5、一致性:采用数据最终一致性策略。

四、框架总体设计

如图所示,系统架构基于SOA架构设计思想,并且采用微服务架构方式进行设计和构建。将系统呈现和数据进行分离。系统呈现基于网页进行实现,支持多种前端UI框架整合及自定义开发;数据由应用服务提供,统一通过“网关API”提供使用。架构支持通过网络层、应用层的负载均衡中间件等,实现高可用和并发处理能力。架构将一些基础公共功能抽离构建成中间件。

2、消息平台:负责应用服务之间更新同步信息,将原有系统架构分布式事务调用更新信息的方式,调整为通过消息异步发布/订阅处理,保证数据最终一致性,应用服务之间降低耦合度和强依赖关系。高并发能力下,取得缓存作用。

3、服务注册监控中心:负责应用服务注册发布登记,同时监控应用服务接口运行情况,支持动态控制应用服务接收请求,实现“去中心化”服务控制。组件实现服务注册登记、监控等功能。

4、认证中心:负责架构访问统一身份认证。通过用户口令和权限进行控制访问。结合“网关API”实现安全访问、限流等功能,同时实现页面管理功能。

5、日志管理系统:负责记录系统日志,提供服务接口和组件,业务代码通过异步方式将日志信息传输到“消息平台”,日志管理系统订阅“消息平台”的日志信息进行处理存储。同时提供日志管理功能

6、缓存中心:基于Redis分布式内存数据库,搭建架构统一缓存中心,提供统一缓存服务。

五、软件架构设计

如图所示,系统架构以微服务架构方式进行开发,从切面观察每个应用服务进行垂直独立开发,根据职责划分层次,从上而下分为四个层次,分别为Web层、服务接口层、业务逻辑层及数据访问层。Web层主要负责系统功能呈现表达,直接面对用户;服务接口层

主要负责提供标准化服务接口,与呈现层对接;业务逻辑层主要实现应用业务逻辑,是应用服务核心部分;数据访问层负责数据持久化,支持业务逻辑层。各层次之间通过接口进行隔离,有利于后续维护扩展,减低依赖和影响。

应用服务完成开发后进行集成部署。Web层将根据约定集成到Web应用容器,其余层次构建为应用服务进行部署,并将服务接口进行注册登记发布使用。

六、结语

基础架构大致设计就这样,还需要考虑实施部署,可以考虑云平台弹性资源,再结合docker容器技术。

一、引言

随着互联网的快速发展,当前以步入移动互联、物联网时代。用户访问系统入口也变得多种方式,由原来单一的PC客户端,变化到PC客户端、各种浏览器、手机移动端及智能终端等。同时系统之间大部分都不是单独运行,经常会涉及与其他系统对接、共享数据的需求。所以系统需要升级框架满足日新月异需求变化,支持业务发展,并将框架升级为微服务架构。“API网关”核心组件是架构用于满足此些需求。

很多互联网平台已基于网关的设计思路,构建自身平台的API网关,国内主要有京东、携程、唯品会等,国外主要有Netflix、Amazon等。

1、基于nginx平台实现的网关有:KONG、APIUmbrella

2、自研发的网关有:apigee、Zuul

三、API网关设计

API网关是微服务架构(MicroservicesArchitecture)标准化服务的模式。API网关定位为应用系统服务接口的网关,区别于网络技术的网关,但是原理则是一样。API网关统一服务入口,可方便实现对平台众多服务接口进行管控,对访问服务的身份认证、防报文重放与防数据篡改、功能调用的业务鉴权、响应数据的脱敏、流量与并发控制,甚至基于API调用的计量或者计费等等。组件设计如下:

1、黑白名单:实现通过IP地址控制禁止访问网关功能,此功能是应用层面控制实现,再往前也可以通过网络传输方面进行控制访问。

2、日志:实现访问日志的记录,可用于分析访问、处理性能指标,同时将分析结果支持其他模块功能应用。

3、协议适配:实现通信协议校验、适配转换的功能。

4、身份认证:负责网关访问身份认证验证,此模块与“访问认证中心”通信,实际认证业务逻辑交移“访问认证中心”处理。

5、计流限流:实现微服务访问流量计算,基于流量计算分析进行限流,可以定义多种限流规则。

6、路由:路由是API网关很核心的模块功能,此模块实现根据请求,锁定目标微服务并将请求进行转发。此模块需要与“服务发布管理中心”通信。“服务发布管理中心”实现微服务发布注册管理功能,与其通信获得目标微服务信息。

四、API网关部署

API网关是一个公共基础组件,无状态,可支持多套分布式部署。如下图所示:

五、API网关实现技术

1、技术:框架整体基于.NET平台构建,所以API网关也暂定基于.NET4.6平台和ASP.NETWebAPI2.0框架实现。具体软件架构就用上一篇所介绍的。

2、性能:部署于IIS7.0,1000个并发查询请求,平均响应90ms。

可能在IIS7.0和.Net4.6平台,在大并发性能处理上会更不上,后续将考虑基于.netcore进行升级开发,并部署于Linux平台。

API网关主要原理是相通,不同平台结合本身平台整体框架设计,可选用不同的技术实现,目前有些基于SpringMVC、node.js、Erlang技术进行研发。

日志对大型应用系统或者平台尤其重要,系统日志采集、分析是系统运维、维护及用户分析的基础。

一、系统日志分类

一般系统日志可分为三大类:

1、用户行为日志:通过采集系统用户使用系统过程中,一系列的操作日志。

2、业务变更日志:特定业务场景需要,采集某用户在某时使用某功能,对某业务(对象、数据)进行某操作,由A变成B。

3、系统运行日志:系统运行服务器资源、网络及基础中间件的情况进行定时采集日志分析。

二、常见日志分析应用场景

日志采集分析是由需求驱动,根据某种场景的需要日志采集,采集的日志进行针对性的分析。一般常见的日志分析结果应用场景有:

1、分析系统或者平台哪些功能是最受欢迎:什么时候使用最多用户使用,某个区域、某类用户使用最多。有利于功能推广;有利于提升服务器资源从而提高用户体验。

4、自动化运维:场景微服务架构的系统或者平台,对运维投入的要求高,自动化部署和运维,可以减少运维的工作量和压力。系统运行环境日志采集、分析,可实现预警、服务器资源动态调配,有利于快速定位排查故障。

不同系统的运行环境、功能应用场景及需要采集分析日志的需求也各不相同。日志内容、采集方式存在多样性,日志数据量大,所以需要设计一套日志采集系统,满足日志采集需求,支持便捷将分析结果反捕于应用功能。

三、日志采集系统总体设计

基于以上日志采集的初步分析,尤其微服务架构中,微服务治理能力、服务负载需要依赖服务日志的采集分析,所以日志采集子系统是微服务架构的基础支持功能。日志采集系统总体设计如下:

如上图所示,根据日志整个过程,系统由三部分组成:日志采集、日志存储&分析及结果应用。日志采集主要负责提供多种方式进行采集日志;日志存储&分析主要实现分析统一存储和定制的场景分析日志;结果应用实现将日志分析结果提供服务接口或者默认的管理功能,供应用功能使用。

日志采集整体过程:日志采集后,通过在线或者离线传输到消息队列,由日志消费应用拉取后进行存储。根据分析需要定制自动作业任务实现日志数据抽取、转换、统计后,将结果数据写入关系型数据库。提供服务接口或者日志查询默认管理功能进行使用。

1、日志采集

日志采集实现三种方式进行采集日志:

(2)ServiceProxy方式:基于log4.net优秀的日志组件和消息队列客户端驱动,进行封装为日志记录服务代理,提供便捷、统一的接口供应用进行使用。支持将日志记录到应用本地和在线实时发送至消息队列,其中记录到应用本地,可结合第三种方式完成应用功能日志采集的功能。

(3)LCClient方式:实现客户端批量抓取日志数据,发送至LCServer。LCClient客户端基于TCP协议与LCServer服务端进行通信,基于NIO框架构建,可支持高并发处理能力。LCServer再将日志数据写入消息队列。

日志采集通过提供三种方式,满足不同的业务应用场景使用采集日志。

2、日志存储&分析

日志存储及分析由五部分构成:消息队列(MQ)、日志接收服务端(LCServer)、日志存储(Elasticsearch)、任务作业(Quartz.net)及关系型数据库(MySQL)。

(1)消息队列(MQ):日志通过消息队列实现消息统一接收,做一道缓冲,满足日志数据并发接收能力。

(2)日志接收服务端(LCServer):接收LCClient客户端批量发送日志数据,并将其发送至消息队列。

(3)日志存储(Elasticsearch):选用ES做日志存储,主要考虑ES是一种文档化分布式搜索服务,支持PB级的数据存储,支持上百个节点的分布式集群能力,并且提供丰富的API使用,数据查询方面有着优越的性能。

(4)任务作业(Quartz.net):通过定制化开发作业任务实现对ES日志数据抽取、转换、分析后,将结果存储于关系型数据库。Quartz.net中间件是业界公认的作业任务组件。

(5)关系型数据库(MySQL):实现日志结果数据存储,供日志应用查询使用。MySQL有着优越的主从复制机制,可解决单节点查询性能瓶颈,同时提供传统SQL脚本操作数据的能力,提供开发效率。

日志数据存储和分析后,最终目的就是提供与应用功能使用。

3、分析结果应用

分析结果应用主要提供服务接口和管理功能两种方式。

(2)管理模块方式:默认提供一套日志查询管理功能,方便于应用直接集成使用。

四、总结

日志采集本身也是一个分布式系统,服务端每个节点都支持分布式集群部署,可实现高并发、高可用性。本文只是一种抛砖引玉,系统每个组件还需要深化详细,同时也包括实施部署。

二、设计原则

系统在总体微服务架构设计思想下,遵守平台标准,并结合实际解决问题的需要,进行设计和研发,系统严格按照如下设计原则设计:

1、模块化:根据职责和归属明确,进行拆分模块,模块功能高度内聚。

2、服务化:各模块通信,通过服务方式进行调用,服务之间通信,遵守平台的标准。

3、松耦合:系统模块之间通信,基于行业通用标准,按照“约定优于配置”思想,充分体现系统模块之间松耦合的关系。

4、高性能:采用异步的方式进行记录日志和分析,不影响平台总体性能。

5、易扩展:日志采用统一的接入方式,支持灵活扩展。

6、跨平台:支持不同技术语言、平台进行采集日志。

三、总体架构

1、日志报文

2、日志记录

日子记录,支持多种日志记录组件:Log4.net(本系统选用)、.Netcore自带的Nlog、微软企业库等,针对JAVA技术语言开发的服务,则选用log4j组件,只要按照约定规范进行打印日志即可。将日志信息记录到本地文件。

3、日志采集

日志采集,选用filebeat组件,filebeat是一个轻量级的日志传输组件,其可以通过提供一种轻量级的方式来转发和集中日志和文件,帮助你把简单采集和发送的事情简单化。本质上filebeat是一个日志信息搬运工,不进行日志过滤和分析工作。同时支持跨平台。

4、日志接入

日志接入,考虑日志量在某一故障情况,可能存在较大并发接入,所以选用Kafka组件作为日志信息接入分析的统一入口,kafka组件是一个高性能的MQ组件,具有高并发、高可用的特性。统一接入方案,为系统提供更为灵活的采集日志,不受限于某一平台、技术或者日志采集组件,均可将运行日志进行接入分析和存储。

5、日志分析及储存

日志分析,采用.NetCore研发,以后台服务的方式进行运行,订阅kafka的日志消息进行批量消费,分析程序支持横向扩展部署于多个程序,提升日志的消费能力,保障日志接收能力和分析能力相当。对日志分析后存储于Elasticsearch(以下简称:ES),ES是一个高可扩展的开源全文搜索和分析引擎,它允许存储、搜索和分析大量的数据。非常适合存储半结构化的日志数据,便于全文搜索日志信息。

6、日志管理服务

日志管理服务,实现查询ES中的运行日志数据,通过WebAPI方式提供界面功能调用。本系统采用“前后分离”应用开发技术,前端界面功能采用H5JS,后端服务以restful方式提供API接口。

根据不同应用场景和需求,选用不同的日志分析架构或者自行研发,最终目的就是为了快速、方便捕捉系统日志,有助于分析系统运行情况。尤其对于微服务架构大型平台,运行日志更为重要。本文主要是将系统设计原则、思想进行记录,同时对有需要的同学提供参考,可能再实际应用中,还有很多地方需要完善或者优化。

THE END
1.基于ASPNET的医院电子病历管理系统课件经管文库...基于ASPNET的医院电子病历管理系统课件 https://bbs.pinggu.org/thread-12492537-1-1.html
2.Easy.Admin基于Asp.NetCore的通用权限管理系统Easy.Admin - 基于 Asp.Net Core 的通用权限管理系统 经过间断的一年多接近两年的修修补补,从 Asp.Net Mvc 到 Asp.Net Core,到如今.https://www.imooc.com/article/293074
3.新闻cms系统阅速新闻cms系统基于asp.net mvc 5.27架构开发,修改模板界面简单容易,性能优越。 阅速CMS系统 定位于报社、杂志社、政府、企业、高校、医院、个人等,经360网站安全测试合格的cms软件。 阅速CMS系统,产品代号为Aspxadmin CMS(以下简称Aspxadmin CMS),诞生于2022年,是asp.net技术中更为强大的内容管理系统。本系统基...http://www.aspxadmin.com/yscms
4.ymnets后台管理系统(ASP.NETMVC5+EF6+easyui)ASP.NET MVC4+EasyUI+三层工厂模式 实现权限管理系统 其中Entity为模型实体层类库;DAL为数据访问层类库,主要负责数据库操作;BLL为业务逻辑类库,Common为公共帮助类库,WebUI为用户层。 上传者:bhsr12时间:2019-05-15 基于springboot+mvc+freemarker+aop实现校友信息管理系统源码.zip ...https://www.iteye.com/resource/weixin_38534349-10588334
5.asp.net可视化工作流引擎RoadFlow拥有全浏览器兼容的可视化流程设计器、表单设计器、基于角色的灵活精细权限管理等先进设计理念,是您开发OA、CRM、HR等企事业各种应用管理系统的最佳基础平台。 工作流平台基于Asp.net的b/s架构开发,需要.NET Framework4.0(或.NET Core3.1)以上版本和IIS6.0以上运行环境。数据库支持SqlServer,MySql,Oracle,PostgreSql。 https://www.roadflow.net/RoadFlow
6.PageAdminCMSPageAdmin CMS系统是基于.Net MVC框架的网站管理系统,安全、稳定、灵活,全国用户超过百万,致力于为企业、学校、政府网站建设和网站制作提供企业级内容管理系统解决方案。https://www.pageadmin.net/
7.网站毕业设计选题传统的网站新闻管理方式有两种,一是静态html页面,更新信息时需要重新制作页面然后上传页面并修改相应链接,这种方式因为效率太低已不多用。二是基于asp和脚本语言,将动态网页和数据库结合,通过应用程序来处理新闻,这是目前较为流行的做法。但是由于asp本身的局限性使得系统有一些不可克服的缺陷,而采取了Asp.net技术的...https://www.diyifanwen.com/w/wangzhanbiyeshejixuanti/
8.药店管理系统毕业论文(2篇).doc药店管理系统毕业论文篇一 廊坊师范学院本科毕业论文 学姓年专 论文题目: 基于ASP.NET 药店管理系统指导教师: 杨晓光 廊坊师范本科生毕业论文(设计) 论文题目:基于.NET 的药店信息管理系统 论文摘要:目前,大中型城市的多数药品店已经实现了商品管理、员工管理、销售管理及销售管理等的信息化和网络化,提高了管理效率。https://max.book118.com/html/2018/0514/166316989.shtm
9.图书管理系统软件,thesoftoflibrarymanagementsystem,音标...基于ASP.NET的图书管理系统设计与实现 更多例句>> 5) book management system 图书管理系统 1. In this thesis,I have stated data integrity s necessity and how to make it come true by using a book management system as an example. 以图书管理系统为例阐述了实现数据完整性的必要性和实现方法。 2...http://dictall.com/indu/192/1916359FD01.htm
10.ASP.NET网站后台管理系统随笔分类一念〃首页 新随笔 联系 订阅 管理 随笔- 10文章 - 0评论 - 4阅读 -43329 随笔分类 -ASP.NET 网站后台管理系统 公告 昵称:一念〃 园龄:7年2个月 粉丝:4 关注:9 +加关注 <2024年11月> 日一二三四五六 272829303112 3456789 10111213141516 17181920212223 ...https://www.cnblogs.com/yn-yinian/category/1105744.html
1.ASP.NETMVC+EF框架+EasyUI实现权限管理系列之开篇(4):代码管理工具使用SVN,这个我的项目中我不准备用了,但是我会准备时间写篇博客来了解一下它的使用。 (5):ASP.NET MVC的处理流程,也就是熟悉一下MVC框架。 (6):EasyUI的使用,这个技术又Demo,大家可以下载看一下。 (7):Entity FrameWork框架的使用。 https://www.u72.net/daima/nxkuz.html
2.基于ASPNET的素质学分管理系统随着教育体制的改革和素质教育的推进,对学生的综合素质评价越来越重要。素质学分作为评价学生综合素质的重要指标,需要一个高效、科学的管理系统来进行管理。基于ASPNET的素质学分管理系统能够满足学校对学生综合素质学分的管理需求,提高管理效率,促进教育公平。 https://blog.csdn.net/l961903965/article/details/143674797
3.ASP.NET文档MicrosoftLearn了解如何使用 ASP.NET Core 创建快速、安全、跨平台和基于云的 Web 应用和服务。 浏览教程、示例代码、基础知识、API 参考和更多内容。https://docs.microsoft.com/zh-cn/aspnet/core/
4.基于.NET的ASP.NET学生宿舍管理系统毕业论文毕业设计网本文旨在开发一款基于.NET的ASP.NET学生宿舍管理系统,包括学生、宿舍和管理员等用户的管理功能。该系统采用.NET框架开发,使用ASP.NET技术进行Web应用程序的搭建。 在论文中,我们将阐述宿舍管理系统的设计思路、功能需求以及系统架构。系统的主要功能包括学生信息管理、宿舍信息管理、学生宿舍申请、学生宿舍查询、管理员登录...http://www.taolw.com/a/net/6820.html
5.基于ASP.NET的教学综合管理系统的设计与实现本文首先介绍了教学综合管理系统的现状和发展趋势;然后对Web开发过程中的几个关键技术进行了分析、探讨。文中重点介绍了基于ASP.NET教学综合管理系统的设计过程,主要包括需要分析、总体设计、详细功能设计过程等。最后总结了本文所做的工作,分析教学综合管理系统存在的问题及需要进一步改进的方向。 本系统是基于辽宁机电职...https://cdmd.cnki.com.cn/Article/CDMD-10141-1013200939.htm
6.适用于开发人员的10个最佳ASP.NET的CMS系统CMSAxCMS.net是一个免费的企业网站内容管理系统(CMS)完全基于微软NET平台,极大地简化了复杂的过程,涉及高可扩展性和交互性的Web应用程序的创建和管理。 3)kooboo Web CMS Kooboo是一个基于ASP.NET MVC的CMS系统,实现面向企业级的内容管理解决方案和快速开发。Kooboo具有如下主要特性: ...https://www.open-open.com/news/view/a90f1/
7.基于.NET的ASP企业服务管理系统的设计与实现本文首先介绍了ASP企业的概念、产生、发展、主要业务——虚拟主机服务及其应用现状,指出了现有ASP企业管理模式中存在的不足,阐明了研发一套基于.NET的ASP企业服务管理系统的必要性和可行性;其次,本文对现有ASP企业管理主要业务——虚拟主机管理业务的流程和企业内部办公管理工作流程进行分析,提出了ASP企业服务管理系统的...https://wap.cnki.net/lunwen-2005077890.html
8.asp.net基于WEB层面的云LIS系统平台源码asp.net基于WEB层面的云LIS系统平台源码 随着计算机技术在检验管理方面的广泛应用,以及各种先进的检验仪器在检验医学领域的使用,检验科室对信息化管理提出了更高的要求。正是在这样的背景下开发出了实验室信息管理系统(简称LIS) 结合当今各检验科管理及实验室规模的不同状况,充分吸收当今IT科技的最新成就,开发出以高度...https://blog.51cto.com/u_16102274/8862019
9.asp学生信息管理系统11篇(全文)本文在参考国内外开发学校管理系统的经验和先 进技术的基础上, 使用 ASP 开发技术, 以 SQLSERVER2008 为后台数据库,设计并实现了基于 B/S 模式的学校管理系统。 该页面主要是在学校管理中学分制维护和成绩维护的工作(如图 2 所示)。 本系统采用基于 B/S 构架,B/S 是业务架构平台体系中常用的平台体系,有着...https://www.99xueshu.com/w/filexhn92tw5.html
10.03级毕业论文推荐题目(6月22日更新)通过论文工作,学生将掌握数字证书原理、互联网安全性概念、Visual Studio.net开发,并开发在掌上设备实现的应用。 5.基于ASP.net 2.0的教学辅导系统 通过论文工作,将掌握ASP.net 2.0建交互式网络应用的方法,并开发相关教学辅导网站系统。 6.基于数字证书的网站身份认证研究及实现 ...https://som.bnuz.edu.cn/info/1016/2621.htm
11.物业管理论文题目94、论三级资质物业管理公司的发展战略 95、联通大厦物业管理改进研究 96、XX市物业管理顾客满意度研究评价 97、物业服务企业发展战略研究 98、XX市住宅物业管理公司竞争力的评价 99、基于ASP.NET技术的小区物业管理系统的设计与实现 100、论物业管理中业权利及其行使 101、完善我国物业管理立法的构想 102、物业管理信息...https://www.yjbys.com/file/wuyeguanlilunwentimu.html
12....基于.Net5.0Uni核心商城系统(CoreShop)是基于 Asp.Net 8.0、Uni-App开发、支持可视化布局的小程序商城系统;前后端分离,支持跨平台运行;拥有分销、代理、团购秒杀、接龙、拼团、直播、优惠券、自定义表单等众多营销功能,拥有完整SKU、下单、售后、物流流程,支持可视化自定义首页模块布局效果。 https://gitee.com/mr520_admin/CoreShop/
13.5个基于.NetCore值得推荐的CMS开源项目腾讯云开发者社区后台采用.Net Core 6开发的,前端采用Vue前后端分离的架构。目前实现简约的权限管理系统、基础字典项管理、随笔专栏,评论点赞,消息通知,标签等仿掘金模块。https://cloud.tencent.com/developer/article/2351126
14.计算机应用技术(网站开发)将实际项目引入到课堂,通过项目实战系统学习PHP+MySQL编程技能,并完成基于Web的应用软件、动态网站的设计与实现,真正掌握一技之长;同时掌握Linux系统和Apache服务器配置、管理与维护方面的技能。 《ASP.NET程序设计与网站开发》 通过参与实际项目,利用ASP.NET语言,系统学习用户界面设计、Web应用与服务的开发、通过ADO.NET...http://www.chaoshan.cn/a/zhaoshengban/zhuanyejieshao/jisuan/2012/0327/2066.html
15.C#利用ASP.NETCore开发学生管理系统详解C#教程随着技术的进步,跨平台开发已经成为了标配,在此大背景下,ASP.NET Core也应运而生。本文主要利用ASP.NET Core开发一个学生管理系统为例,简述ASP.NET Core开发的常见知识点,仅供学习分享使用,如有不足之处,还请指正。 涉及知识点 开发学生管理系统,涉及知识点,如下所示: 开发工具:Visual Studio 2019 目标框架:....https://www.jb51.net/article/233685.htm
16....fuluteam/fulusso:基于react+asp.netcore开发的单点登录系统基于react+asp.net core开发的单点登录系统. Contribute to fuluteam/fulusso development by creating an account on GitHub.https://github.com/fuluteam/fulusso