目录
应用架构
一、单机调优
早年间的项目大多采用 mvc 开发。
1)特点
每个项目成一个 mvc 结构,部署在应用服务器上( tomcat 、 jboss 、 websphere , weblogic )。
(课题: tomcat 源码剖析)
随着业务扩张,需求迭代,项目变得越来越大,一个 war 包动辄几百兆。
崇尚调优, jvm 单节点调优甚至接近于强迫症的地步。(课题: jvm 性能调优)
二、动静分离
早年间的 Apache+tomcat ,后被 nginx 几乎一统江山。( 前后端开发模式的演进: mvc 页面嵌套 → 接口化)
1)方案
- 静态响应:tomcat对静态文件响应一般,提取静态文件,直接由nginx响应
- 动态代理:后端api通过代理转发给tomcat应用机器
2)特点
- 开发层面调整:项目结构要同步调整,由原来的一体化mvc转换为后端api+前端形式。
- 前后协调:前后端的分工变得更明确,互相并行开发,独立部署,但也带来了接口协调与约定等沟通问题
- 跨域问题:后段与前端如果域名不同,可能存在跨域问题(head头,jsonp等手段可以解决)。
三、分布式
单纯的动静分离只解决了自己服务的项目结构,跨项目接口调用时,必须经过 rest 请求,不利于服务之间的交互。
淘宝 V3.0 , HSF 出现,服务化导向,架构师忙于 SOA 和系统关系的梳理。
1)方案
- 公共服务:重复开发的基础服务提取出来,形成服务中心,避免重复造轮子,降低成本,架构团队出现。
- 独立性:各自服务独立部署升级,粒度更细,低耦合,高内聚
- SOA理念诞生:服务治理的范畴,重在服务之间的拆分与统一接口
2)技术手段
异步化:
- rabbitmq (课题:滴滴打车超时架构设计)
- rocketmq(课题:滴滴打车排队原理与剖析)
- kafka (课题:海量订单数据同步)
Rpc:
- dubbo (课题:dubbo核心源码剖析,zookeeper源码剖析)
- Rpc框架(课题:Rpc核心源码与手写Rpc,netty通信与进阶)
3)特点
- 界限把控:服务的粒度、拆分和公共服务提炼需要架构师的全局把控。设计不好容易引发混乱
- 部署升级:服务数量增多,人工部署变的不现实,必须借助自动化运维
(课题:高效运维篇, docker 、 k3s 、 jenkins 、 Apollo 应用发布实战)
- 服务可用性:抽调的微服务因需要被多个上层业务共享,可用性等级变高,一旦down机就是灾难
- 熔断和限流:做好服务熔断和限流,提防服务单点瓶颈造成整个系统瘫痪。短信提醒失败不要影响下单。
(课题: cloud alibaba , sentinel 限流)
四、微服务
1)方案
- 微服务是基于SOA思想,将系统粒度进一步细化而诞生的一种手段
- 中台化得以实现,各个中心以及前端业务拆解为多个小的服务单元。
2)技术手段
- 微服务经历了从1.0(cloud)到2.0的演化(service mesh),目前企业中主流的解决方案依然是cloud全家桶
- springcloud (课题:springcloud微服务前沿技术栈,spring、springboot源码剖析)
3)特点
- 服务拆分:粒度并非越小越好。太小会带来部署维护等一系列成本的上升。(课题:skywalking微服务监控)
- 接口约束:系统增多,各个服务接口的规范化日益重要,要求有统一的服务接口规范,推动企业消息总线的建设
- 权限约束:接口不是任意想调就可以调的,做好权限控制,借助oauth2等手段,实现服务之间的权限认证。
五、总结与思考
- 如何理解微服务与SOA,分布式的关系?
- 常用的分布式服务框架有哪些?