阿里云王牌架构师一问开发者:我需要一个高并发的架构,我的系统要改造成微服务吗
阿里云高级解决方案架构师 杨旭
世界最大混合云的总架构师,4年前,开始作为双11阿里云技术负责人,负责搭建全球最大的混合云结构,把 “双11”的电商业务和技术场景在阿里云上实现,并保障这个混合云在双11当天能够满足全球客户的购物需求。
正文:
最近大家都在谈微服务,随着越来越多的在线业务需要提供更大并发的scale-up 和 scale out能力,微服务确实提供了比较好分布式服务的解决方案。
微服务并不陌生,知道SOA其实也就很容易理解微服务,可以把微服务当做去除了ESB的SOA。ESB是SOA企业服务架构中的总线,而微服务是去中心化的分布式软件架构,个人认为最大的设计区别在于设计初衷:
SOA是为了最大化的实现复杂系统代码的可复用性
而微服务是为了最大限度的解耦,不同业务系统甚至可以是不同语言之间的通信
没有最优的架构,只有最合适的架构,一切系统设计原则都要以解决业务问题为最终目标,脱离实际业务的技术情怀架构往往会给系统带入大坑。所有问题的前提要搞清楚我们今天面临的业务量有多大,增长走势是什么样,而且解决高并发的过程,一定是一个循序渐进逐步的过程。
网上的一张图很经典,总结的非常好:
整个系统进化分为三个阶段:
x轴,水平扩展阶段,通过负载均衡服务器不断的横向扩充应用服务器,水平扩展最重要的问题是需要注意不用服务器之间的如何保持session和会话同步,不能让用户在不通服务器之间切换时有感知应用扩展后自然遇到的问题就是DB的瓶颈:连接数,iops等。
z轴,就是对数据库的拆分,难度上了一个台阶,Sharding的基本思想就要把一个数据库如何进行切分,可以分为水平切分和垂直切分,水平切分相对简单,一主多从,多主都可以,根据业务的需要,多主切分设计时需要注意主键的关系,解决多写在进行数据同步时候的冲突问题,垂直拆分更加复杂,一般都会涉及到架构逻辑的改造,需要引入中间件,来进行数据源的管理,垂直拆分时把关系紧密(比如同一模块)的表切分出来放在一个库上,或者通过hash进行拆分,从而将原有数据库切分成类似矩阵一样可以无限扩充的队列。
y轴扩展,最后就是功能分解了,也就是我们讲的微服务切分。微服务拆分将巨型应用按照功能模块分解为一组组不同的服务,淘宝的系统当年也经历了这样的过程,通过五彩石项目从单一的war包拆分成了今天的大家看到买家,卖家中心,交易等系统。
引入微服务前你要知道的两三事:
**
1、成本升高,引入微服务架构,需要对原来单一系统进行拆分,1到100以后多服务的部署会带来成本的升高**
2、解决分布式事务一致性问题
以前单一的系统好处很多,一条sql解决完成所有业务逻辑,微服务做完一件事情需要涉及多系统调用,系统间网络的不确定性给结果带来很多不确定性,如今天淘宝的系统,完成一次交易下单需要在上百个系统之间调用,如何保证系统的可靠性,以及核心数据如钱的最终一致性是设计之初就要想明白的,这里大多都要借助中间件来实现。
3、微服务的逻辑设计原则
随着不断拆分微服务,以及业务的迭代发展,系统之间极有可能出现混乱调用,所以微服务的顶层设计显得尤为重要,架构师需要搞清楚微服务的架构模型。那核心的设计思想就在于如何进行服务的分层,以及服务的重用,通过分层将服务进行分配,上层服务包装下层服务,下层服务负责原子性的操作,上层服务对下层服务进行业务性的组合编排,一定要理解业务,微服务拆分不是简单的系统组合,再说一遍一定要理解业务,否则上层服务一定会出现大量的交叉调用,系统复杂度会指数级上升,好的微服务架构师一定是业务架构师,基于业务的建瓴,微服务设计三部曲,遵循自下而上的设计原则:
原子服务
首先确认最基本业务最维度的原子服务,原子服务定义就是大家都会最大化重用的功能,需要在应用内的闭环操作,没有任何跨其他服务的分支逻辑,杜绝对其他服务的调用,有自己独立的数据存储,作为最底层服务抽象存在,以淘宝为例,卖家数据,卖家数据,订单数据就属于最基本的原子服务。
服务组合
在业务场景下,一个功能都需要跨越多个原子服务来完成一个动作。组合服务就是将业务逻辑抽象拆成独立自主的域,域之间需要保持隔离,服务组合会使用到多个原子服务来完成业务逻辑,如淘宝的交易平台会调用用户,商品,库存等系统。
业务编排
最外层就是面向用户的业务流程,一个产品化的商业流程需要对组合服务进行逻辑编排来完成最终的业务结果,这个编排服务可以完全是自动化的,通过工作流引擎进行组合自动化来完成特定SOP定义,这对企业应用的自动化流程改进也很有意义。如淘宝类目的双十一活动,通过对不通服务组合进行重用实现不通的营销活动逻辑。
4、运维管理的复杂度提升
微服务让应用数量增加很多,链路的集成、测试、部署都成为新的挑战,以前一个war包解决的问题,需要通过多应用发布来完成,发布时服务之间的依赖影响,会导致功能不可用,测试阶段的依赖性可能会让用例跑不下去,这些都会是需要新考虑的问题,需要有平台化的工具来支撑,目前阿里通过aone产品来保证从日常到预发到线上的持续集成交付。
实践:
目前很多微服务通过DevOps和Docker来落地, 也可以借助云上FAAS平台来实现,如AWS的Lambda,阿里云的Bazaar,都可以把Function发布成一个Service,结合云效系统来进行服务整个生命周期的编排,可以极大的提高工程效率,实现应用微服务。
【往期回顾】
1.阿里云王牌架构师二问开发者:容器和虚拟化你会怎么选?
https://yq.aliyun.com/articles/623272?spm=a2c4e.11155435.0.0.120433122PgFrW
2.阿里云王牌架构师杨曦:也谈系统缓存设计误区及高阶使用技巧
https://yq.aliyun.com/articles/624061
3.阿里云王牌架构师杨曦:N多环境N多应用个性配置管理如何从混乱到简单?
https://yq.aliyun.com/articles/623882
更多干货内容尽在阿里云总监课,戳链接报名:
https://yq.aliyun.com/promotion/689
阿里云总监系列课重磅上线!聚焦人工智能、弹性计算、数据库等热门领域,首次集齐12位阿里云技术高管,耗时半年精心打磨,从理论到实践倾囊相授,从零开始绘制技术大牛成长路径,限时直播课程免费报名中!
阿里云王牌架构师一问开发者:我需要一个高并发的架构,我的系统要改造成微服务吗相关推荐
- 阿里云王牌架构师一问开发者:系统要改造成微服务吗
阿里云高级解决方案架构师 杨旭 世界最大混合云的总架构师,4年前,开始作为双11阿里云技术负责人,负责搭建全球最大的混合云结构,把 "双11"的电商业务和技术场景在阿里云上实现,并 ...
- 阿里云王牌架构师一问开发者:我需要一个高并发的架构,系统要改造成微服务吗
摘要: 最近大家都在谈微服务,随着越来越多的在线业务需要提供更大并发的scale-up 和 scale out能力,微服务确实提供了比较好分布式服务的解决方案. 阿里云高级解决方案架构师 杨旭 世界最 ...
- 我需要一个高并发的架构,我的系统要改造成微服务吗
摘要: 最近大家都在谈微服务,随着越来越多的在线业务需要提供更大并发的scale-up 和 scale out能力,微服务确实提供了比较好分布式服务的解决方案. 阿里云高级解决方案架构师 杨旭 世界最 ...
- 阿里云王牌架构师二问开发者:容器和虚拟化你会怎么选?
阿里云高级解决方案架构师 杨旭 世界最大混合云的总架构师,4年前,开始作为双11阿里云技术负责人,负责搭建全球最大的混合云结构,把 "双11"的电商业务和技术场景在阿里云上实现,并 ...
- 阿里云王牌架构师杨曦:也谈系统缓存设计误区及高阶使用技巧
阿里云高级解决方案架构师 杨旭 世界最大混合云的总架构师,4年前,开始作为双11阿里云技术负责人,负责搭建全球最大的混合云结构,把 "双11"的电商业务和技术场景在阿里云上实现,并 ...
- 阿里云王牌架构师杨曦:N多环境N多应用个性配置管理如何从混乱到简单?
摘要: 众多项目研发过程中为了调试观察应用运行时表现,修改常量配置的场景下往往需要频繁地对应用代码及配置项做打包发布进行应用版本更新甚至回滚代码.基于该场景,任何的应用配置项变更都需要将整个应用重新打 ...
- 盘点:阿里云上8款免费的开发者工具
盘点:阿里云的8款免费的开发者工具,想到阿里云,就以为是要花钱购买云资源吗?其实,除了付费的云服务外,阿里云还给开发者提供了不少免费的开发者工具.今天,小编就来给大家详细盘点下:阿里云上8款免费的开发 ...
- Java架构师面试问些什么?微服务之springcloud面试题(共22题,含详细解答)
[Java架构师面试网]收集整理了几乎整个架构师学习途中会遇到的面试题,希望大家都能早日圆自己的架构师梦~ 公众号:Java架构师面试网,关注回复"资料"即可领取精美整理的面试资料 ...
- 【产业互联网周报】互联网集体进入调整期:张勇兼任阿里云总裁,卢伟冰晋升小米集团总裁,小鹏组织架构调整;...
关注ITValue,看企业级最新鲜.最价值报道! 华为天才少年"稚晖君"确认离职,下一步或将创业:欧拉累计装机量超过300万套,中国服务器操作系统新增市场份额超过25%:推特出现 ...
最新文章
- 吵架后一个老公的检讨书(超经典)
- pt-online-schema-change中update触发器的bug
- 22 React高阶组件
- 数据结构带头结点单向不循环链表(C语言版)
- BeetleX网关非法Url请求拦截插件
- STM32基于SPI和AD7192的数据采集
- idea整合EasyCode基于lombok和swagger自定义模板
- dell 服务器ghost系统,Dell 5000笔记本装win7 64位Ghost系统真正成功教程
- centos 5.6 x86 安装 文泉驿字体
- exchange 2010部署之五
- Houdini 官方HDA SideFX Labs 安装
- 计算机网络双绞线和交叉线的区别,直连线和双绞线有什么区别?
- ie不能加载java_解决IE中页面Java无法加载的问题
- mt管理器java_MT管理器
- 教你利用阿里云服务器搭建一个随时随地的Web IDE
- Unity3D笔记第十六天——Mecanim动画系统
- win7原版iso_【JUJUMAO_MSDN系统】Windows 10 1903 64位 五版合一 原版ISO镜像
- 在线阅读-阿里Java开发手册最强版本【泰山版】
- 防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之设备与楼栋单元设置
- autorecover mac的ppt_Office for Mac快捷键之苹果PowerPoint幻灯片PPT篇
热门文章
- 测试 | 让每一粒尘埃有的放矢
- sja1000 中断_SJA1000中断接收为什么接收中断不能被触发,不能进入中断接收子函数?看资料,里面说会自动触发中断的。...
- MongoDB 查询昨日/昨天数据
- c语言计算日出日落时间_日出日落时间 计算软件 日出日落时间计算公式
- 12 | 理解电路:从电报机到门电路,我们如何做到“千里传信”?
- 【洛谷】P1462 通往奥格瑞玛的道路
- 计算机考研复试---中文自我介绍模板+英文自我介绍模板+项目毕设介绍模板( 干货满满!!!)
- 钉钉视频回放下载【史上最全!!全干货!!!】
- 小飞计算器(小飞可编程复数计算器)用户手册
- 《会计学》账户与复式记账笔记的思维导图