先简略回顾一下。对于互联网产品的高性能架构设计一般包括如下几个大方面:前端
后端服务通常指用户直接看到的远程服务,涉及到网络硬件、逻辑计算、通讯协议和数据存储等部分。下面咱们将着重介绍高性能后台服务的设计方法和策略。redis
后台服务的高性能设计是互联网产品高性能架构设计中最重要的一环,对服务总体性能起到决定性的做用。咱们来看看设计高性能后台服务的方法:sql
1分布式缓存。数据库
缓存的本质是经过key-value形式的Hash表提高读写速度,通常状况是O(1)的读写速度。读写量比较高,变化量不大的数据比较适合使用缓存。业内比较成熟的分布式缓存系统有redis/memcache。在此我向你们推荐一个架构学习交流圈。交流学习企鹅圈号:948368769 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多编程
通常的缓存设计架构以下:用户第一次请求应用程序时,经过存储服务直接读取数据,而后将数据存储到缓存系统去,用户第二次请求的时候就直接从缓存系统读取,从而提高读取速度。后端
对于分布式缓存系统能够Set化部署,好比商品数据缓存到Set1,用户数据缓存到Set2,或者一类用户的数据缓存到Set1,另外一类的用户缓存到Set2,以下图:浏览器
此外,也能够按集群化部署,每个缓存服务存储的数据都是对等的,能够对外提供同等的服务,因此外部请求须要负载均衡到不一样有缓存服务器,以下图:缓存
Set化部署的目的主要在于将不一样类型的数据路由到不一样的地方,好处就是能够减小不一样业务数据的耦合,能够针对不一样业务进行不一样的优化,从而提高总体性能。集群式部署的目的在于,提升缓存系统的对外服务能力,上层业务的路由策略简单灵活,扩缩容比较容易。安全
2.服务分层性能优化
在经典的三层(接入层、逻辑层和存储层)后台服务架构中,三层的划分的原则就是同层次的系统专一处理本身的事情。接入层专一于处理前端和后台服务的接入连通、安全认证和数据转发。逻辑层专一于处理不一样业务的无状态逻辑服务。存储层专一于处理业务数据的存储。这样分层的好处在于各个层次可以依据业务特色专一于本身的事情,提升系统复用性,下降业务间的耦合性。在中小型网站中三层架构的典型实现是Nginx(接入层)、Apache Web(逻辑层)、Mysql/Redis(存储层)。
3.操做异步化
目前大型系统中广泛消息队列来将调用异步化,不只能够提高系统性能还能够提高系统的扩展性。对于大量的数据库写请求,对于数据库的压力很大,同时也会形成数据库响应不及时。能够考虑使用消息队列,数据库的写请求能够直接写入到消息队列,而后经过多线程或多进程从消息队列中读取数据慢慢写入到数据库。消息队列服务器的处理速度会远远快于数据库,因此用户在写入操做时会感受到很快的写入速度。
此外,消息队列对于请求不均衡的系统,还具备削峰填谷的做用,将短期内的高峰请求,逐步平摊到更长的时间里去,从而避免短期内大量请求压跨系统。
4.服务拆分
服务拆分有多种说法,好比大系统小作,分布式拆分,分层结构以及目前很流行的微服务化。不过服务拆分通常来讲有如下原则:
对于服务拆分主要有纵向拆分和水平拆分两种方法。三层架构就是典型的纵向拆分模式,第2)点有所阐述。对于不一样的业务模块,针对业务逻辑和存储服务能够按水平拆分的方法将拆分为不一样的系统。好比商品系统逻辑层、订单系统逻辑层、商品系统存储层、订单系统存储层。在此我向你们推荐一个架构学习交流圈。交流学习企鹅圈号:948368769 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
5分布式集群化
分布式集群化是指将不一样的业务用集群化的方式部署到不一样的机器上去,对于每个业务都具有大规模集群化的能力,从而提高系统的扩展性和高性能。
对于无状态化的被调服务A,在基于负载均衡的技术下,能够经过集群化部署成倍的提高服务性能,好比A1服务的性能是1万请求每秒,那么部署3台A服务机器,那么A服务的性能就是3万请求每秒了。
6.代码优化
对于IO操做的请求能够采用基于状态机的异步化编程。以下图的请求须要业务系统调用三个接口才能返回响应数据,当业务系统收到请求时,将给该请求分配一个seqid,该seqid在接口响应中也应该原封返回,而后并发三个IO接口的请求包,将该seqid对应的请求上下文保存到timer中,而后去并发处理其余请求,从而极大的提高系统性能。
此外,高性能的编程模型还有多线程模型、多进程模型、多协程模型和事件驱动模型。
对于数据结构的设计能够采用高效的数据结构,好比典型的key-value缓存系统就是基于hash的基本原理来实现的,hash表的查询效率是O(1),效率极快。