高性能后台服务器架构设计,互联网架构设计:高性能的后端

先简略回顾一下。对于互联网产品的高性能架构设计一般包括如下几个大方面:redis

1)Web浏览器高性能设计sql

2)App客户端高性能设计数据库

3)高性能的网络和硬件编程

4)后台服务高性能设计后端

后端服务通常指用户直接看到的远程服务,涉及到网络硬件、逻辑计算、通讯协议和数据存储等部分。下面咱们将着重介绍高性能后台服务的设计方法和策略。浏览器

一、高性能的网络和硬件缓存

网络硬件是提供实现高性能服务的先决条件,若是网络硬件失败,再优秀的团队也是“巧妇难为无米之炊”。互联网产品在网络硬件方面常常须要使用的高性能方案有以下几种:安全

1)CDN加速技术。CDN加速将网站的内容缓存在网络边缘(离用户接入网络最近的地方),而后在用户访问网站内容的时候,经过调度系统将用户的请求路由或者引导到离用户接入网络最近或者访问效果最佳的缓存服务器上,由该缓存服务器为用户提供内容服务;相对于直接访问源站,这种方式缩短了用户和内容之间的网络距离,从而达到加速的效果。服务器

2)足够的带宽。带宽应该知足在网站峰值的状况还能足够快速的使用,因此网络带宽应该大于峰值流量 = 峰值QPS * 平均请求大小。只有在保证带宽的状况才能实现高性能服务。

3)服务器性能。服务器性能主要从CPU、内存和磁盘三个方面来考虑,CPU核心数量能尽可能多点,内存大小最好大一点,利用到磁盘存储的话SSD会优于机械磁盘。

4)硬件负载均衡设备。对于有条件的团队能够采购硬件负载均衡设备,增强后台服务负载均衡的能力,好比F5。

二、后台服务高性能设计

后台服务的高性能设计是互联网产品高性能架构设计中最重要的一环,对服务总体性能起到决定性的做用。咱们来看看设计高性能后台服务的方法:

1)分布式缓存。缓存的本质是经过key-value形式的Hash表提高读写速度,通常状况是O(1)的读写速度。读写量比较高,变化量不大的数据比较适合使用缓存。业内比较成熟的分布式缓存系统有redis/memcache。

通常的缓存设计架构以下:用户第一次请求应用程序时,经过存储服务直接读取数据,而后将数据存储到缓存系统去,用户第二次请求的时候就直接从缓存系统读取,从而提高读取速度。

对于分布式缓存系统能够Set化部署,好比商品数据缓存到Set1,用户数据缓存到Set2,或者一类用户的数据缓存到Set1,另外一类的用户缓存到Set2,以下图:

此外,也能够按集群化部署,每个缓存服务存储的数据都是对等的,能够对外提供同等的服务,因此外部请求须要负载均衡到不一样有缓存服务器,以下图:

Set化部署的目的主要在于将不一样类型的数据路由到不一样的地方,好处就是能够减小不一样业务数据的耦合,能够针对不一样业务进行不一样的优化,从而提高总体性能。集群式部署的目的在于,提升缓存系统的对外服务能力,上层业务的路由策略简单灵活,扩缩容比较容易。

2)服务分层

在经典的三层(接入层、逻辑层和存储层)后台服务架构中,三层的划分的原则就是同层次的系统专一处理本身的事情。接入层专一于处理前端和后台服务的接入连通、安全认证和数据转发。逻辑层专一于处理不一样业务的无状态逻辑服务。存储层专一于处理业务数据的存储。这样分层的好处在于各个层次可以依据业务特色专一于本身的事情,提升系统复用性,下降业务间的耦合性。在中小型网站中三层架构的典型实现是Nginx(接入层)、Apache Web(逻辑层)、Mysql/Redis(存储层)。

3)操做异步化

目前大型系统中广泛消息队列来将调用异步化,不只能够提高系统性能还能够提高系统的扩展性。对于大量的数据库写请求,对于数据库的压力很大,同时也会形成数据库响应不及时。能够考虑使用消息队列,数据库的写请求能够直接写入到消息队列,而后经过多线程或多进程从消息队列中读取数据慢慢写入到数据库。消息队列服务器的处理速度会远远快于数据库,因此用户在写入操做时会感受到很快的写入速度。

此外,消息队列对于请求不均衡的系统,还具备削峰填谷的做用,将短期内的高峰请求,逐步平摊到更长的时间里去,从而避免短期内大量请求压跨系统。

4)服务拆分

服务拆分有多种说法,好比大系统小作,分布式拆分,分层结构以及目前很流行的微服务化。不过服务拆分通常来讲有如下原则:

a)高内聚、低耦合: 将耦合性低的业务逻辑划分为不一样系统,将聚合性高的业务逻辑划分为同一个系统。

b)单一职责原则:对于一个层次或者一个模块应该保持相对单一的职责,专一于本身的服务。

c)故障隔离:不一样系统必须相对独立设计和运行,可以独立处理本身的故障,而不至于影响全局。

d)独立运维和持续交互:对于不一样的系统能够随时迭代更新,而不至于影响其余服务。

对于服务拆分主要有纵向拆分和水平拆分两种方法。三层架构就是典型的纵向拆分模式,第2)点有所阐述。对于不一样的业务模块,针对业务逻辑和存储服务能够按水平拆分的方法将拆分为不一样的系统。好比商品系统逻辑层、订单系统逻辑层、商品系统存储层、订单系统存储层。

5)分布式集群化

分布式集群化是指将不一样的业务用集群化的方式部署到不一样的机器上去,对于每个业务都具有大规模集群化的能力,从而提高系统的扩展性和高性能。

对于无状态化的被调服务A,在基于负载均衡的技术下,能够经过集群化部署成倍的提高服务性能,好比A1服务的性能是1万请求每秒,那么部署3台A服务机器,那么A服务的性能就是3万请求每秒了。

6)代码优化

对于IO操做的请求能够采用基于状态机的异步化编程。以下图的请求须要业务系统调用三个接口才能返回响应数据,当业务系统收到请求时,将给该请求分配一个seqid,该seqid在接口响应中也应该原封返回,而后并发三个IO接口的请求包,将该seqid对应的请求上下文保存到timer中,而后去并发处理其余请求,从而极大的提高系统性能。

此外,高性能的编程模型还有多线程模型、多进程模型、多协程模型和事件驱动模型。

对于数据结构的设计能够采用高效的数据结构,好比典型的key-value缓存系统就是基于hash的基本原理来实现的,hash表的查询效率是O(1),效率极快。

转自原文:https://zhuanlan.zhihu.com/p/28817489

你可能感兴趣的:(高性能后台服务器架构设计)