架构体系演进

总体概述

任何架构体系的成型都需要随着系统访问量,数据量增长而进行发展变更,业务需求在其中推动技术架构的发展变更。

架构目标

高性能:提供快速访问,高并发下及时响应

高可用:服务正常可用,可用性衡量标准通常为几个9

可伸缩:资源扩容,应对突发和流量脉冲

安全性:提供网站安全访问和数据加密、安全存储等策略。

扩展性:方便对现有模块做版本升级,新模块的上线,突发活动下的服务降级。

敏捷性:对系统突发情况的快速排查与应对。

架构演进总方向

部署层面:单机到集群,集中式到分布式,物理部署到云化

业务层面:单一mvc到垂直拆分,服务治理到微服务

数据层面:db到集群,单一关系型数据到多样化nosql,搜索引擎,文件服务


单机架构

单机架构适用于小型网站

方案

大型机:单机架构容易引发对单机性能的过度追求,造成大型机的高配发展,成本高,

JVM:  对于JVM单节点调优要求很高。但其优点同样明显。

特点

部署简单:采用web包部署与发布,db同台机器连接,简单易操作。

资源争夺:在业务发展的初始阶段尚可支撑,随着访问量的上升,单机性能很快会成为系统瓶颈。


数据分离

稍微大一点的系统,dba出现,数据库追逐商业大型db如oracle

方案

多台机器:tomcat与mysql各自独占机器资源

针对性扩容:tomcat应用机更注重cpu的运算和内存,mysql更注重io与磁盘性能,针对各自情况扩容

特点

数据维护:可以抽出单独的dba来维护数据库服务器

数据安全:需要跨机器访问数据库,链接密码需要注意防范泄漏

数据库瓶颈:数据库频繁读写,io很快成为瓶颈


数据缓存

方案

数据冷热划分:热点数据如类目、商品基础信息热加载,其他数据延迟加载

ehcache:非分布式,简单,易维护,可用性一般

memcache:性能可靠,纯内存,客户端需要自己实现,无持久化

redis:性能可靠,纯内存,自带分片,集群,哨兵,支持持久化,几乎成为当前的标准方案

特点

缓存策略:缓存与db的边界需要架构师去把控,重度依赖可能引发问题

缓存陷阱:击穿,穿透,雪崩

数据一致性:删除、双写


应用集群

方案

apache:早期负载均衡方案,性能一般

nginx:7层代理,性能强悍,配置简洁,可以携带lua完成前端逻辑,当前不二之选

haproxy:性能没问题,可做7层或4层代理。

lvs:4层代理,性能最强,linux集成,配置麻烦h5:硬件负载,财大气粗的不二选择

特点

session保持:集群环境下,用户登陆及session的保持成为问题,需要分布式session做支撑

分布式协同:分布式环境下对资源的加锁要超出线程锁的范畴,上升为分布式锁

调度问题:调度程序跑重复

机器状态管理:多台应用机的状态检测与替换需要做到及时性

服务升级:滚动升级成为可能

日志管理:日志文件分散在各个机器,促进集中式日志平台的产生


读写分离

方案

缓存集群:redis哨兵,集群,分片,pre-sharding,memcache一致性hash

数据库集群:一主多从、双主单写、灾备 (供销灾备双主单写案例)

特点

数据延迟:准实时,单方法内的写入立即读取问题

开发层面:需要开发框架具备多数据源的支持,以及自动化的数据源切换

数据分片:memcache需要客户端处理,redis支持集群数据分片

单库瓶颈:业务越来越多,表数量越来越多。单库成为瓶颈

数据局限:依然无法解决单表大数据的问题,比如订单积累达到亿级,即使在从库,关联查询依然奇慢无比



分库分表

方案

早期分区表:range,list,hash,key,对开发端透明,但分区数有限制,性能提升有天花板。

业务分库:订单库,产品库,活动库,会员库

横向分表:3个月内订单,半年内订单,更多订单

特点

分库:无法使用数据库事务保证完整性,而分布式事务的效果并不理想,多采用幂等和最终一致性方案。

分表:数据聚合矛盾,以订单为例,下单时间维度的分表和用户维度的查询是一对矛盾。排序统计变得异常困难。

中间件:Sharding-JDBC,Mycat,Atlas



动静分离

方案

静态响应:tomcat对静态文件响应一般,提取静态文件,直接由nginx响应

动态代理:后端api通过代理转发给tomcat应用机器

特点

开发层面调整:项目结构要同步调整,由原来的一体化mvc转换为后端api+前端形式。

前后协调:前后端的分工变得更明确,互相并行开发,独立部署,但也带来了接口协调与约定等沟通问题

单层局限:单个nginx代理在并发处理任务时,依然会有上限,静态文件节点需要面临扩容。


多层代理

方案

多层代理:在nginx前再加一层lvs做代理,作为流量的统一入口,再分发给下层的多个nginx,静态服务得到扩容

特点

机房受限:lvs依然是单一节点,即使keepalived做到高可用,流量仍然需要在唯一入口进入。


跨机房

方案

dns轮询:通过配置多个ip将服务部署到多个机房,通过dns的策略轮询调用,可以实现机房层面的扩容

CDN:就近原则,使用户获得就近的机房访问相关资源,自己投资太大,购买他方需要付费。

特点

基本解决了机器部署的扩容问题,随着业务的发展,数据呈现多样化发展,底层异构化数据成为新的瓶颈。


异构数据

方案

nosql:商品特殊化属性,mongodb,hbase

搜索引擎:商品信息库,lucene,solr,elasticsearch

分布式文件存储:商品图片,上传的文件等,hdfs,fastdfs

特点

开发框架支持:存储的数据多样化,要求开发框架架构层面要提供多样化的支撑,并确保访问易用性

数据运维:多种数据服务器对运维的要求提升,机器的数据维护与灾备工作量加大

数据安全:多种数据存储的权限,授权与访问隔离需要注意


业务线拆分

方案

业务分发:代理层设置不同的二级域名,如b2b.abc.com,b2c.abc.com,分发给不同的服务器

消息互通:服务之间使用mq等异步消息提供通讯。

跨域问题:因为多个业务线占据不同的域名,出现多个主站,单点登录被推上前线

特点

粒度较粗:纯以业务为导向,往往形成业务团队各自为战,新业务线出现时疯狂扩张

重复开发:相同功能可能在不同业务的项目中被重复开发,比如促销、短信发送、收银台


服务化

方案

公共服务:重复开发的基础服务沉淀,形成服务中心,避免重复造轮子,降低成本,架构团队出现。

独立性:各自服务独立部署升级,粒度更细,低耦合,高内聚

SOA:服务治理的范畴,重在服务之间的拆分与统一接口

微服务:可以理解为服务治理的一种手段,趋向于小服务的独立运作与部署。

技术手段:springcloud,dubbo

特点

界限把控:服务的粒度、拆分和公共服务提炼需要架构师的全局把控。设计不好容易引发混乱

部署升级:服务数量增多,自动化部署面临挑战

服务可用性:抽调的微服务因需要被多个上层业务共享,可用性等级变高,一旦down机就是灾难

熔断和限流:做好服务熔断和限流,提防服务单点瓶颈造成整个系统瘫痪


中台化

方案

业务沉淀形成独立的中心,各个中心之间借助服务总线实现业务协作与服务重组。

特点

团队规模:团队规模扩张,人员增多,协调成本上升,组织机构要有配套调整

接口授权:各个中心的接口授权与开发需要把控

接口约束:系统增多,各个服务接口的规范化日益重要,要求有统一的服务接口规范,推动企业消息总线的建设

跨服务令牌:借助oauth2等手段,实现服务之间的权限认证


容器化

针对中台化的建设及微服务数量的飙升,部署和运维支撑同步进行着变革。面临微服务的快速部署,资源的弹性伸缩等挑战,容器化与云被推进

方案

虚拟化:vm方案,Openstack,Vmware,VirtualBox

容器化:docker

编排:swarm,k8s,k3s

云化:容器化解决了资源的快速伸缩,但仍需要企业自备大量预备资源。推动私有云到企业云进化

特点

资源预估:注意资源的回收,降低资源闲置和浪费,例如大促结束后要及时回收。

运维要求:需要运维层面的高度支撑,门槛比较高

预估风险:云瘫痪的故障造成的损失不可估量,(openstack垮掉的事故案例)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容