目录
可扩展概述
常见的拆分思路
分层架构
SOA架构
微服务
微内核架构
软件系统,和硬件,建筑不同,天生和内在就具有可扩展性,即是其魅力也是其难点
魅力在于,可以通过修改和扩展,不断让软件系统具备更多的功能和特征,满足新需求顺应技术发展趋势
难点在于,如何以最小代价去扩展系统
所有的可扩展架构设计,最后的基本思想都是 拆!
以学生管理系统为例
面向流程拆分
展示层,负责用户页面设计
业务层,负责具体业务逻辑处理,登陆/注册/信息管理
数据层,负责完成数据访问
存储层,负责数据的存储
面向服务拆分
注册,登陆,信息管理,安全设置等服务
面向功能拆分
每个服务都可以拆分为更多细粒度的功能
注册服务,提供多种方式进行注册,手机号/身份证/学生邮箱注册
登陆包括,手机/身份证/邮箱登陆
信息管理服务,包括基本信息管理,课程管理
安全设置,包括密码修改,找回密码等
可扩展方式
面向流程拆分
扩展时大部分情况只需要修改某一层,少部分需要修改关联的两层
面向服务拆分
对某个服务扩展时,只要扩展相关服务即可
面向功能拆分
对某个功能扩展时,只需扩展相关功能即可
不同的拆分方式,得到不同的系统架构,经典的可扩展系统架构如下
以管理系统为例
分层至少是2层以上
如C/S架构,B/S架构
常见的是3层架构,MVC,MVP
4-5层的架构比较少见,一般是比较复杂的系统才会超过5层,如操作系统内核这样的
逻辑架构分层,划分的对象可以是单个业务子系统,也可以是整个业务系统,划分的维度是指责
逻辑分层架构中的层是自顶向下依赖的,典型的有 操作系统内核架构,TCP/IP脚骨
分层架构详解
SOA架构全程 面向服务的架构 Service Oriented Architechure
SOA更多在传统企业 制造业,金融业落地推广,在互联网行业并没有打的规模实践和推广
互联网行业推行SOA最早是亚马逊
SOA提出的背景是企业内部IT系统重复建设效率低下
SOA提出三个概念
1.服务
所有业务功能都是一项服务
2.ESB
企业服务总线,将企业中各个不同的服务连在一起
因为各个部门的服务是异构的,需要有统一标准,SOA是用ESB来屏蔽系统对外的不同接口
3.松耦合
减少各个服务间的依赖和互相影响
使用SOA后各个服务是相互独立运行的,甚至不清楚某个服务到底有多少对其他服务的依赖
经典的SOA架构如下
SOA的缺点就是ESB,其需要实现与各个系统间的协议转换,数据转换,透明的动态路由等功能
下图中ESB将JSON转换为Java
下图中ESB将REST协议转换RMI和AMQP两个不同的协议
ESB虽然功能强大,但实现中的协议有很多种,如JMS,WS,HTTP,RPC等
数据格式也有很多种,如XML,JSON,二进制,HTML等
要完成这么多协议和数据格式的相互转换,工作量和复杂度都很大,而且耗费大量计算性能,当ESB承载的消息太多时,ESB本身会成为整个系统的性能瓶颈
SOA的ESB也是无奈之举,SOA提出时,企业各种异构的IT系统已经存在很多年,完整重新或者按照统一标准改造成本非常大,只能通过ESB方式去适配已经存在的各种异构系统
如果是重新构建整个企业的IT系统,完全可以从一开始就制定好各种规范,那么SOA的ESB就无须存在了
2005年提出概念,2014年Mattin Flower写了关于微服务的论文
微服务与SOA的关系
具体的不同
微服务和SOA是适用不同场景的,并非谁好谁差
微服务的陷阱
微服务最佳实践
1.服务粒度
三个火枪手的微服务拆分粒度原则
一个微服务三个人负责开发
稳定和维护阶段可以一人负责一个或几个微服务
2.拆分方法
基于业务逻辑拆分
基于可扩展拆分
基于可靠性拆分
基于性能拆分
基础设施
大部分人关注的是微服务的small,lightweight特征,但实际上真正决定微服务成败的,是automated
当微服务库划分不合理,拆分后自动化和相关的基础设施不健全,补起来短则1年多则2-3年
因为基础设施太多了
基础设施总结
包含两类组件,核心系统,插件模块
设计关键点
OSGi架构
一个国际标准组织,最初用于广域网和局域网设备上展开业务的基础平台,用于嵌入式是被
后被用于PC领域,Eclipse使用OSGi标准开发了微内核架构
类似的还有Apache Felix,Srping DM
模块层
生命周期层
服务层
规则引擎架构
规则引擎作为微内核,执行引擎解析配置好的业务流
商品促销打折优惠,用代码实现改动很麻烦,用规则引擎就可以很灵活应对
可扩展
易理解
高效率
其插件之间不需要通讯,一个插件输出,一个插件将其输入即可
常见的规则引擎工具是JBoss Drools,基于Rete算法