【原创设计分享】面向服务的分布式日志架构

概述

对于日志的记录,无论是Log4Net也好,NLog日志也罢,提供的功能都比较全面,并且久经历史考验,但是基于服务的日志架构并不采用他们其中的任何一个框架来实现,即使他们可以处理的更好,该架构主要用来处理对于多台服务器,并且每台服务器下的有许多不同的站点,集中对日志进行处理,包含需要记录的审计日志和系统日志,统一交由一个服务来实现对日志的存储。并且可通过相应的工具进行查看日志的实时监控情况。

整体设计图

设计思想

 根据整体设计图不难看出对于实现很简单。

首先,写一个WCF服务,里面提供接口并且提供订阅接口,自定义一个配置文件用来配置日志的记录的记录规则和日志的存储方式,在每次服务启动的时候加载一次,剩下的逻辑就是你怎么去根据配置对Task发送给服务的数据进行处理。

其次,创建一个类库,实现对服务的引用,这个类库的主要作用是对服务的隔离,也就是使用代理模式实现服务的引用,应用程序在使用服务进行日志存储的时候,只需要访问代理类即可,在代理中主要处理,如何连接远程WCF服务,对出错的情况如何处理以及服务在不可用的时候,如何保证应用程序发出来的日志不丢失,并且不影响使用的应用程序。在代理类中我主要根据队列来实现的,每次应用程序发送过来的日志,首先进入日志队列中,然后开启异步任务去实现出队列发送数据到远程服务进行存储,其次就是在远程服务不可用的时候,需要采用辅助队列来对出队列并未进行远程存储的数据的储存,然后辅助队列开始出队列/入队列不断尝试知道服务可用为止,当服务可用时可以保证日志的顺序不会错乱,并且不会丢失。在进行入队列操作是一定要对上锁,要不然会出现错误。当服务不可用的时候,在队列中每满100条将队列清空,队列中的内容进行序列化为XML文件,当服务可用时,先从文件中反序列化进行优先存储,之后再进行出队列操作。

最后,在调用组件的应用程序端在配置文件中对WCF访问节点进行配置。

知识点扩展(代理Proxy模式)

上述的架构中,我们用到了代理模式,什么是代理模式呢?通俗的讲,一个你和你的朋友在你家一起玩,突然间你想吃超市的食品,而你去由于懒癌晚期,你的朋友帮你去买你想吃的东西,从你朋友的角度看,他就是你的代理,这就是代理模式。在上面的架构中用的代理模式主要用来对远程WCF服务的代理,在连接服务前和连接服务后需要处理好多事情,而这么事情并不能交给消费它的程序每次都去重复相同的事情,对于消费者而言,并不需要知道WCF是如何连接。在举一个日常编码中常用的一个例子,就是数据访问层,数据访问层直接与数据库进行交互,完成对数据的操作,对于业务逻辑层而言不需要知道数据库是如何连接、数据访问层如何与数据库进行交互的。所以数据访问层就是一个最常见的代理模式。数据访问层大家都会写,这里就不用代码来实现了。

时间: 2024-10-14 13:55:51

【原创设计分享】面向服务的分布式日志架构的相关文章

领域驱动设计的面向服务架构

[.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店 一.前言 在前面专题一中,我已经介绍了我写这系列文章的初衷了.由于dax.net中的DDD框架和Byteart Retail案例并没有对其形成过程做一步步分析,而是把整个DDD的实现案例展现给我们,这对于一些刚刚接触领域驱动设计的朋友可能会非常迷茫,从而觉得领域驱动设计很难,很复杂,因为学习中要消化一个整个案例的知识,这样未免很多人消化不了就打退堂鼓,就不继续研究下去了,所以这样也不利于DDD的推广.然而本系列

[.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店

一.前言 在前面专题一中,我已经介绍了我写这系列文章的初衷了.由于dax.net中的DDD框架和Byteart Retail案例并没有对其形成过程做一步步分析,而是把整个DDD的实现案例展现给我们,这对于一些刚刚接触领域驱动设计的朋友可能会非常迷茫,从而觉得领域驱动设计很难,很复杂,因为学习中要消化一个整个案例的知识,这样未免很多人消化不了就打退堂鼓,就不继续研究下去了,所以这样也不利于DDD的推广.然而本系列可以说是刚接触领域驱动设计朋友的福音,本系列将结合领域驱动设计的思想来一步步构建一个网

面向服务开发中三层架构中事务单元的生命期管理

    经典的三层分层结构,控制层(Control),服务层(Service),持久层(Repository)应用广泛,在面向服务(SOA)的架构中,配合DI.IOC实现开放灵活的技术架构.     SOA中,Respository面向数据访问,提供访问数据库.文件.或其他业务接口提供持久能力.Service面向业务,提供访问业务功能的接口,使用领域模型描述业务需求,方便产品人员.需求人员和客户沟通理解业务流程.最后,Control面向业务流程整合,提供基于事务的需求实现.     事务,用需求

微服务—ELK分布式日志框架

之前我们已经通过Sleuth和zipkin实现了在各个微服务的日志信息中添加跟踪信息的功能. 但是,在微服务架构下,微服务被拆分成多个微小的服务,每个微小的服务都部署在不同的服务器实例上,当我们定位问题,检索日志的时候需要依次登录每台服务器进行检索. 这样是不是感觉很繁琐和效率低下.所以我们还需要一个工具来帮助集中收集.存储和搜索这些跟踪信息. 集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep.awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询.

大型分布式网站架构设计与实践

大型分布式网站架构设计与实践(一线工作经验总结,囊括大型分布式网站所需技术的全貌.架构设计的核心原理与典型案例.常见问题及解决方案,有细节.接地气/京东:大型分布式网站所需技术的全貌.架构设计的核心原理与典型案例.常见问题及解决方案) 陈康贤 著   ISBN 978-7-121-23885-7 2014年9月出版 定价:79.00元 460页 16开 编辑推荐 --作者一直奋战在阿里巴巴及淘宝网一线,书中所讲是其亲身经验的总结,显得更加实战和珍贵. --全面介绍大型分布式网站架构所涉及的技术细

分布式日志收集系统Apache Flume的设计详细介绍

问题导读: 1.Flume传输的数据的基本单位是是什么? 2.Event是什么,流向是怎么样的? 3.Source:完成对日志数据的收集,分成什么打入Channel中? 4.Channel的作用是什么? 5.取出Channel中的数据,进行相应的存储文件系统,数据库,或者提交到远程服务器,由谁来完成? 6.Flume支那些数据格式? 7.对于直接读取文件Source,有两种方式,分别是什么? 8.Channel有多种方式有哪些方式? 概述Flume是Cloudera公司的一款高性能.高可能的分布

微服务分布式日志-ExceptionLess篇

一.Exceptionless 简介 Exceptionless 是一个开源的实时的日志收集框架,它可以应用在基于 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF,Console,MVC 等技术栈的应用程序中,并且提供了Rest接口可以应用在 Javascript,Node.js 中.它将日志收集变得简单易用并且不需要了解太多的相关技术细节及配置. 在以前,我们做日志收集大多使用 Log4net,Nlog 等框架,在应用程序变得复杂并且集群的时候,可能传统的

什么是面向服务的体系结构?看完你就懂了

通过优锐课的java架构知识讲解中,了解面向服务的体系结构的特征以及什么构成基于Java的SOA基础结构.分享给大家学习参考. 面向服务的体系结构(SOA)是基于用于同步和异步应用程序的请求/答复设计范例的分布式计算的演变.应用程序的业务逻辑或各个功能被模块化,并作为针对消费者/客户端应用程序的服务呈现.这些服务的关键是它们的松散耦合性质.即服务接口独立于实现.应用程序开发人员或系统集成商可以通过组合一项或多项服务来构建应用程序,而无需了解服务的基础实现.例如,可以在.Net或J2EE中实现服务

面向服务的体系架构(SOA)—架构篇

面向服务的体系架构(SOA)-架构篇 1.面向服务的体系架构(SOA) 面向服务的架构(service-oriented architecture)是Gartner于2O世纪9O年代中期提出的面向服务架构的概念.2002年的l2月,Gartner提出"面向服务的架构(SOA)"是"现代应用开发领域最重要的课题"之后.国内外计算机专家.学者掀起了对SOA的积极研究与探索. 在分布式的环境中,将各种功能都以服务的形式提供给最终用户或者其他服务.如今,企业级应用的开发都采