通用高性能服务框架解析

做了多年的后台服务,一直想将自己这么多年对高性能服务架构的一些粗浅认识写出来,一方面对自己这个阶段成长做个总结, 另一方面想通过这个与各位做一个交流,妄不吝赐教。

一、最初对服务架构的概念

最初接触服务端程序应该是2011年,当初基于服务架构的概念是基于这样一个模型

这是最简单的一种C/S模型结构,客户端直接连接服务端,只能适用于对效率、并发量、扩展性要求低的环境,所以当请求量逐渐上升,你会发现这种架构的系统,在处理上已经不满足业务的需求了,所以你衍生出下面一种架构。

二、多个App分流模式

这是一个两层框架,中控层是控制服务只做转发分流操作,分流的算法通常是轮询,具体可以根据实际的业务情况去制定。应用层是具体的应用服务,执行具体业务。这种架构的主要优势有一下几点:

1、中控层将流量有效分布到各个业务服务,而中控层的应用只做转发不做业务,在处理请求量上效率要远远高于直连业务服务,所以框架相对于上面一个在吞吐量上大幅增加

2、较易于扩展,如果发现应用服务不能支撑现有业务量时,可以通过增加应用服务来分流。

但是这个种架构随着业务量的增加也会渐渐不适用,有同学可能会说多搞几个业务服务分流不就得了,这里得考虑到资源成本,管理成本等等问题,所以这种方式在大请求量下是不适用的,问题就在如何提高应用服务的业务处理速度,我们可以引入缓存机制。

三、加缓存机制的框架

在普通业务处理上,查询请求量是最多的,如何提高查询效率,就成为关键,一般情况下数据库或者磁盘IO的读取都能成为瓶颈,所以往往我们会在业务应用与数据库或者磁盘之间添加缓存机制,业务应用先去查缓存,缓存没有再去查对应的数据库或者磁盘,90%的请求都能在缓存中解决,这样不仅减小了数据库的压力,同时也增加业务处理的速度。当然你可能会根据业务的需要多几个缓存,但是基本的思路不变,具体根据你的业务走,此种架构基本能解决80%的问题。

四、加入容灾机制的框架

上面所讲的框架只是一种基础框架,在实际应用中需要考虑的因素很多,比如服务器宕机了,怎么平滑过渡,不影响业务等等,这里就得加入容灾机制。

监控服务主要负责监控负载均衡服务是否有宕机情况,如果有,置为相应状态,客户端请求监控服务,获取有效的负载均衡服务的地址,进行连接,这样即使有一个服务宕机,其实并不影响整个系统的运行,当然还有数据库的容灾,这里就不多做讨论了!

五、总结

影响整个系统性能的因素有很多,这里仅就框架上做了一些粗浅的讨论,抛砖引玉,实际情况可能考虑的因素会更多,至于常见程序上的优化,有时间我也会写一篇文章总结一些。另外高性能WEB应用的框架搭建可以参考这篇文章:http://www.csdn.net/article/2014-11-06/2822529 。 总之增加系统性能的不变原则就是如何快速的处理业务数据。

最后,大家有什么问题或者好提议,可以加入群:291368579

时间: 2024-10-12 16:08:12

通用高性能服务框架解析的相关文章

Dubbo服务框架解析(一)

公司的一个项目的分布式系统的服务管理,使用了阿里的服务框架Dubbo,因此这里准备对服务框架进行了介绍. Dubbo服务框架可以使得java分布式系统之间进行解耦,使用一个服务注册中心来统一管理服务的信息,服务提供者提供注册中心进行注册,而服务消费者可以透明地订阅和消费服务.并支持服务的路由.过滤.负载均衡等,支持多种通讯协议及NIO框架,是一个灵活性和扩展性非常棒的服务管理框架. 本文以github中当前版本2.5.4的源码来分析. 为了支持更灵活的扩展性,当前dubbo拆分了非常多的proj

Dubbo服务框架解析(二)

本节介绍dubbo-common,dubbo-common是公共逻辑模块,包括Util类.通用模型,是其它模块的基础. 扩展机制 SPI SPI是扩展点的注解,标注在类型上,所有的扩展点需要通过SPI来标注. 约定: 在扩展类的jar包内,放置扩展点配置文件:META-INF/dubbo/接口全限定名,内容为:配置名=扩展实现类全限定名,多个实现类用换行符分隔. 1)        自动Wrap扩展点的Wrapper类 ExtensionLoader会在加载扩展点时(通过扩展点配置文件中内容),

高性能服务框架revolver:RUDP(可靠UDP)算法详解(2)

除了发送函数以外,发送缓冲区对象还会响应来自网络的on_ack和on_nack消息,这两个消息分别是处理正常的状态报告和丢包情况下的网络报告.如果收到on_ack,缓冲区对象会把已经接收端报告过来的报文ID全部从发送窗口中删除,然后调用attempt_send尝试新的块发送.如果收到的是on_nack,表示对端有丢包,则先会记录丢包的ID到loss_set中,再调用on_ack进行处理. 触发attempt_send还有可能是定时器Timer,定时器每5MS会检查一下发送缓冲区,并调用attem

高性能服务框架revolver:RUDP(可靠UDP)算法详解

数据块定义 在RUDP模块中,所有发送的数据被定义成RUDPRecvSegment 和 RUDPSendSegment结构,其中RUDPSendSegment是发送块定义,RUDPRecvSegment 是接收块定义.如下: //发送数据片 typedef struct tagRUDPSendSegment { uint64_t seq_; //块序号 uint64_t push_ts_; //进入发送队列的时刻 uint64_t last_send_ts_; //最后一次发送的时刻 uint1

高性能服务框架revolver:RUDP(可靠UDP)算法详解(3)

接收缓冲区相对比较简单,其主要功能是接收发送方的数据并生成接收块.块排序.丢包判断和反馈.读事件通知等.以下是接收缓冲区的定义: class RUDPRecvBuffer { public: ... //来自网络中的数据 int32_t on_data(uint64_t seq, const uint8_t* data, int32_t data_size); //定时事件 void on_timer(uint64_t now_timer, uint32_t rtc); //读取BUFFER中的

基于netty轻量的高性能分布式RPC服务框架forest<下篇>

基于netty轻量的高性能分布式RPC服务框架forest<上篇> 文章已经简单介绍了forest的快速入门,本文旨在介绍forest用户指南. 基本介绍 Forest是一套基于java开发的RPC框架,除了常规的点对点调用外,Motan还提供服务治理功能,包括服务节点的自动发现.摘除.高可用和负载均衡等. 架构概述 Forest中分为服务提供方(RPC Server),服务调用方(RPC Client)和服务注册中心(Registry)三个角色. Server提供服务,向Registry注册

高性能高可用的微服务框架TarsGo的腾讯实践

conference/2.3 高性能高可用的微服务框架TarsGo的腾讯实践 - 陈明杰.pdf at master · gopherchina/conferencehttps://github.com/gopherchina/conference/blob/master/2019/2.3%20%E9%AB%98%E6%80%A7%E8%83%BD%E9%AB%98%E5%8F%AF%E7%94%A8%E7%9A%84%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%A1%86%E6

Spring MVC、Mybatis、Hibernate、Bootstrap、HTML5、jQuery、Spring Security安全权限、Lucene全文检索、Ehcache分布式缓存 、高性能、高并发【Java企业通用开发平台框架】

功能特点: 1.适配所有设备(PC.平板.手机等),兼容所有浏览器(Chrome.Firefox.Opera.Safari.IE6~IE11等),适用所有项目(MIS管理信息系统.OA办公系统.ERP企业资源规划系统.CRM客户关系管理系统.网站.管理后台等). 2.快速开发,敏捷的数据持久层解决方案. 2.1.事务自动处理. 2.2.O/R Mapping基于注解,零配置XML,便于维护,学习成本低. 2.3.接口和实现分离,不需写数据持久层代码,只需写接口,自动生成添加.修改.删除.排序.分

高性能通信框架 HP-Socket v4.1.1

HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++.C#.Delphi.E(易语言).Java.Python 等编程语言接口.HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节:HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中. 为了让使用者能方便快速地学习和使用 HP-S