架构设计

分布式系列-分布式架构演变

2018-08-21  本文已影响0人  老街码屋

分布式系列-分布式架构演变

caojianqiang 程序员代码强 今天

1. 什么是分布式架构?

今天聊聊分布式相关话题,分布式架构通俗的理解就是将一个业务拆分为多个子系统,部署在不同的服务器上,各个子系统相互协作完成业务完整性的工作叫分布式架构。例如一个大型的电商平台是由:用户、商品、订单、物流、支付、积分、优惠券等子系统构成。分布式架构特点:

1:任务分解

2:节点通信

注意:不要混淆分布式架构与集群的概念,集群侧重点是同一个业务部署在多个服务器实例上。而分布式架构侧重点是一个业务拆分为多个子系统,部署在不同的服务器上。

2.分布式架构演变过程?

创业初期,公司为了节约成本,人力物力,希望产品快速上线,快速迭代。在这个背景下系统架构变成如下图:

应用服务器和DB同时在一台服务器实例上,如果产品运营的好,流量一上来,系统开始出现各种卡顿,宕机等各种问题。这时候一般开始从程序、应用服务器、数据库慢SQL进行性能优化。服务器资源进行垂直升级,CPU、带宽、内存等。将应用服务器和DB服务器拆开部署到不同的服务器上,提高系统的吞吐量。这个时候架构又演变成如下图:

垂直的拆分比之前的性能提升少许,但还是不够,接下来应用服务器开始进行水平拆分,应用服务器做集群,nignx将流量随机分配或者按照指定权重分配到不同的应用服务器实例上。架构图由演变成如下图:

虽然应用服务器进行了水平扩展提升了系统吞吐量,但DB服务器开始有点扛不住,一般请求2/8原则,20%源于写请求,80%来源于查请求。故需对数据库进行读写分离架构,接下来系统演变成架构如下图:

架构的演变也是系统复杂度的提升,此时服务器应设计为无状态的,应用服务器不再存储session相关的信息。此时

1:session跨越,共享问题该怎么做?

a:解决方案利用nginx特性session sticky(粘滞会话)

b:session replication利用应用服务器(tomcat)会话同步复制,但容易形成网络风暴,一般不采用。另外也违背服务无状态设计思想。

c:session集中处理例如存储在db或者存储在缓存服务器上redis

d:cookie

注:c、d两种是现在比较主流的解决方案。

2:数据库主从同步怎样做?

一般采用AOP拦截DAO方法名来做主从写读操作、例如insert/add/update/remove/delete走主库,而query/get/list走从库。

电商系统中最频繁的操作是检索商品,为了降低对数据库的频繁访问,此时架构需要进行演变,需引入全文检索中间件,常见的全文检索中间件solr/elasticsearch,两者都是分布式的,文档存储结构,检索速度大大提升,此时数据库的压力也随之减少,另外针对频繁访问页面的内容进行redis缓存,商品大量的图片也要采用分布式文件系统存储业界比较出名的fastDFS阿里大牛开发的。故此时的架构演变如下图:

随着业务复制度的提升,业务需求的快速迭代,此时的单体应用开发很可以说很操蛋,代码结构混乱,代码冗余,维护困难,功能迭代牵一发而动全身,此时的需要将单体应用即电商系统进行业务域垂直拆分成:用户、商品、订单、物流、支付、积分、优惠券等子系统。子系统与子系统通过Http的Restful进行通信。每一个子系统对应相应的业务数据库。此时的架构演变为如下图:

此时电商系统由小型网站慢慢演变为大型网站,大型网站衡量指标访问量(qps/tps)、存储量。此时的架构要支持无缝的水平无缝扩展,高性能,高可用,可伸缩,敏捷等特性。故架构又演变成分布式服务化架构,阿里开源比较出名的服务化框架Dubbo,以及当当网基于Dubbo封装的Dubbox,数据库层面需要分库分表无缝水平扩容。此时的架构如下图:

此时的架构完全服务化的分布式架构,特点:可以大大提升系统的吞吐量并发量,以应用层来讲可以进行无缝的水平扩展,服务化层可以进行无缝水平扩展,数据层也可以进行无缝的水平扩展。系统演变成分布式架构后,也随之带来一些列问题,各个系统,各个组件,中间件是如何进行无缝协作?分布式事务怎样保证一致性?分库分表路由算法?分布式锁?分布式生成器?以及各个中间件之间的特性又是怎样的,坑由有那些缓存穿透,服务调用超时等问题?请敬请期待、后续内容更新!!!

                                                                       微信扫一扫

                                                                      关注该公众号

上一篇下一篇

猜你喜欢

热点阅读