大项目微服务架构设计
根据目前产品存在的问题,针对快速开发、海量用户、大量数据、低延迟等互联网应用的实际需要,通过对业务架构、系统架构、基础架构、技术架构进行分析,采用先进实用的微服务SOA架构重构智慧校园、数字化校园等产品,彻底解决系统解耦、性能低下等问题,而且支持云计算部署,可以满足高并发、高可用、高稳定和高安全等性能要求,提供强大的saas和互联网访问服务。由于采用微服务架构,各个服务模块化编写,具有高内聚低耦合的优势,便于灵活更新升级,而不会影响其他业务。一套代码,同时支持移动应用和pc应用,提高效率,节约成本。这个架构还便于AB灰度发布产品,提高开发效率,对测试、运维管理也可以显著提高效率。微服务通过REST方式提供访问,产品实现重构,进行服务划分,可以充分使用现有的代码。.NET产品使用ASP.NETWeb Api提供rest服务,使用RestSharp访问服务;java产品使用restEasy提供rest服务,使用httpClient访问服务。服务实现统一的注册、治理、发现,通过serviceAdapter统一调用。这个架构有助于对外提供访问API,提供open的开发支持,有利于形成公司的产品优势。
这是一个非中心化微服务架构,互联网时代,企业的核心就是效率。传统企业服务总线是中心化的架构,这会导致效率低下、稳定性差,采用去中心化架构,教育显著提高效率,增强安全性和稳定性。采用数据库存储服务信息,采用消息队列处理事务,特点在于多次调用服务,确保成功,采用统一的接口调用服务,对服务进行管理。
这个架构为用户提供的一个核心价值,在于随着系统机器数量的不断增加,处理性能呈线性上升,可靠性呈指数级上升,而运营成本不会随着机器的增加而显著增加。为了实现这个价值,企业级互联网架构呈现了服务化、去中心化、异步化、高可用、数据化运营等五大特征。而且对于开发可以提高效率,产品修改设计方便,测试、运维简单。
服务化的技术体系提供企业级分布式应用框架来实现原有业务面向互联网服务化改造,改变现在的竖井式、烟囱式的系统建设,让应用开发周期更短,并且能够让IT应用系统进一步的促进业务发展。采用去中心化架构,没有核心流量汇入点,这样带来的负载更小,故障影响的范围也更小,能够大幅降低去中心化应用系统的运营成本。
2.1.1目前现状
1)没有服务化,各产品系统独立开发,代码复用率低,系统之间互相调用,耦合严重,系统解耦独立部署困难。
2)应用间数据复制严重,数据不一致性严重
3)基础组件薄弱,日志,监控系统不完善
4)功能模块定义混乱,包含大量接口,接口定义重复
5)大容量访问下无法提供可靠性服务
6)开发saas互联网功能的产品迫在眉睫,需要满足快速开发、灵活升级、高性能、高可用、高稳定、简化运维等更高的需求。
2.1.2亟待解决
1)核心系统全面服务化:招生、教务、学籍、资产等系统分解为核心服务和基础服务。
2)基础组件:服务化框架,分库分区,缓存组件。
3)加强监控,日志系统。
4)异步化并行,限流,分流,降级,压力测试,异地灾备。
5)数据库统一规划优化。
6)平台和业务功能设计,遵从三个维度定义架构设计的原则:
a. 内容可扩展性
针对智慧校园各个功能提供动态支持。
针对梦想学堂营销活动提供动态可支持性。
b. 功能可扩展性
针对各种扩展功能需求,系统支持统一的方式扩展新的能力,并提供统一的管理。
c. 系统可扩展性
支持对大量用户访问能力的平滑支持。
支持高可用,高安全,并具有高的系统恢复能力。
以基于“云”模式的服务端IT架构框架为整体策略,采用基础架构和功能实现分离的原则:
a. 服务端:构建统一的云模式IT基础设施
基于标准化的设施,分别构建统一的IAAS层和PAAS、SAAS层,实现资源的共享,提高未来业务应用开发的效率和可维护性,并提高整体设备的利用
b. 大架构模式:实现基础架构和功能实现分离原则
功能开发团队
采用简单工具
关注流程
关注功能实现
关注服务划分和治理
关注数据处理
关注用户体验
系统开发团队
关注系统稳定性
关注系统性能
关注系统扩展性
关注系统可维护性
关注系统可靠性
2.1.3改进办法
(1)核心业务抽取出来,作为独立的服务对外服务,实现架构和代码重构。
(2)核心服务调用基础服务,充分复用代码,减少工作量,便于修改维护,把握好服务的粒度划分,过多的服务访问会影响性能,过少会影响灵活性,需要对业务进行细致梳理,合理确定核心服务和基础服务。
(3)服务模块独立部署,充分解耦,各系统灵活使用不同服务,可以独立部署,彻底解决系统耦合不能单独销售问题。
(4)各层彼此独立,修改各层不影响其他层。
(5)数据库读写分离、分库分区
(6)大量使用缓存,提高访问
(7)系统间异步交互
(8)服务对等隔离
(9)移动和pc产品的优化
APP实际上和PC端浏览器是对等的,PC端应用有服务端,APP也需要自己独立的服务端,两个服务端都需要针对自身的特点,独立开发,独立部署,同时实现逻辑和物理层面的解耦,从架构层面彻底摆脱PC思维移动化。
1. 统一服务
核心逻辑从Web应用剥离出来,进行服务化改造,服务实现时不区分PC和移动,APP和Web应用都依赖于这些服务,一套接口,多方调用。
2. 统一网关入口
提供统一的移动网关,所有APP调用指向此网关,网关包括通用层、接口路由层、适配层。
3.通用层
通讯协议适配、数据封装、安全、监控、日志这些系统级功能,每个接口调用都需要同样逻辑,这些功能统一由网关前置处理,避免重复开发。具体实现时,每个通用处理逻辑封装成拦截器,遵循统一的过滤接口,并且做到可配置,网关依次调用这些拦截器,这样可以支持通用逻辑的灵活扩展。
拦截器接口定义如下:
Object filter(Object input) throws Exception
接口路由
经过通用逻辑预处理后,移动接口请求将进一步分发给后端处理(各个Adapter)。URL和Adapter在配置文件里做映射,分发逻辑根据请求中的URL信息,找到对应的Adapter,然后把请求交给Adapter处理。
配置例子如下:
www.Website.com/search SearchAdapter
www.Website.com/detail DetailAdapter
4.服务适配
外部移动接口和内部SOA接口的输入输出格式以及通信协议很可能不一样,比如前者经常是HTTP+JSON格式,后者可能是Hessian+二进制格式,Adapter首先用于移动接口和内部SOA接口的适配,除此之外,Adapter还可能对多个SOA服务做聚合,对APP提供粗粒度的数据,以减少远程网络调用次数。实现上一般每个业务系统有一个Adapter,负责本系统移动接口的调用适配。
Adapter接口定义如下:
Object adapter(Object input) throws Exception
Adapter物理上是jar包,由各个业务线研发团队提供,作为相应SOA服务的前置,最终所有Adapter集中部署在网关,网关本身支持水平扩展。
(10)关键点:
1.服务注册中心,zookeeper集群作为分布式调度中心,各个服务注册在zookeeper之上,注册内容包括服务的请求url,请求ip地址和端口,服务组件名称,注册时间等;
2.Gateway,服务网关作为系统的入口,具有服务转发、授权验证、负载均衡等作用,可以使用高并发框架netty实现高速转发等;
3.访问控制服务,用户首先需要获得系统授权才可以访问业务服务,授权通过token来实现;
4.业务服务1~N,是系统内具体业务组件的划分区别核心服务和基础服务;
5.数据服务,实现信息的修改、共享等;
6.配置中心,整个系统的配置均位于配置中心,组件通过访问配置中心获取配置参数;
7.监控系统,检测服务、redis、zookeeper集群等的各项状态,自动告警和智能调节服务,防止服务器雪崩;
8. 消息队列系统,支撑全部系统;
9.服务治理、发现、调用。
10.服务调用通过serviceAdapter接口完成。
2.2关键功能
1. 通过重构智慧校园架构,完成原有功能及新增功能。架构分为应用层、核心服务层、基础服务层、资源层及ecloud层。
4. 资源层主要是数据和文件的存储,包含通用的缓存资源Redis以及持久化数据库存储MySQL、HBase,及分布式文件系统TFS等。
5. 水平分层有一个特点,依赖关系都是从上往下,上层的服务依赖下层,下层的服务不会依赖上层,构建了一种简单直接的依赖关系。
2.3关键质量属性
l 安全性:应保证系统中关键敏感信息的安全性,包括但不限于用户名密码凭证、Ticket信息等。
l 支持5千万人在线,大部分页面同时最多5000个并发请求,事务成功率不低于98%。
l 平均延时:普通页面,小于2秒,最大不超过5秒;查询页面,小于3秒,最大不超过17秒;
l 运维自动化,实时监控系统,及时发现异常和故障并自动告警。
l 平台共享数据为各个子系统共同调用的数据,减少各子系统间数据的调用,减少系统间的耦合性,达到“强内聚,低耦合”的效果;
l 可实现数据一次输入,多个子系统使用,消除信息孤岛,减少数据库服务器工作量,提高整体使用性能;
l 提供统一的开发框架,提高开发效率,避免重复开发,节约成本;
a)系统稳定、高效,可支持校园内外各种不同使用场景下的并发操作。
b)系统有良好的扩展性:在增加新的功能时旧有模块不做改动或稍作改动即可完成集成,部署更新不影响其他业务。
f)支持6大平台的开发和运行,支持Windows和Linux系统。
g) 采用B/S架构,与外部业务系统之间使用RestfulAPI进行交互,使用Spring MVC、java、c#语言进行开发。
2.6信息标准
信息标准建设是数字化校园建设的重点之一,对推进数字化校园建设,保证 信息的交流与共享,有着重要的意义。鉴于各个学校的特殊性,因此所采用的信息标准必须保证和国家以及教育部的信息标准相兼容。
1. 架构设计原则
3.1架构设计对后续工作的要求
l 系统采用B/S架构,需要使用spring MVC、java、c#语言进行开发,提供RestfulAPI和其他系统进行集成和交互。
l java系统采用java技术构建,应用服务器仅支持部署在Windows +tomcat8平台,但并不限定使用Ecloud系统服务的其他相关系统的操作系统平台,.net系统使用c#开发。
3.2架构设计原则
l 分离关注点,将应用划分为在功能上尽可能不重复的功能点。主要的参考因素就是最小化交互,高内聚、低耦合。但是,错误的分离功能边界,可能会导致功能之间的高耦合性和复杂性,
l 最小知识原则,一个组件或者是对象不应该知道其他组件或者对象的内部实现细节。
l 不要重复你自己,你只需要在一个地方描述目的。例如,特殊的功能只能在一个组件中实现,在其他的组件中不应该有副本。
l 最小化预先设计,只设计必须的内容。在一些情况,你可能需要预先设计一些内容。另外一些情况,尤其对于敏捷开发,你可以避免设计过度。如果你的应用需求是不清晰的,最好不要做大量的预先设计。
l 高内聚低耦合:将不同的功能代码分离开来,更利于系统的设计和开发,同时为可能的变更提供了更小的单元,十分有利于系统的维护和扩展。新增的自定义公式必须符合该原则。
l 可视作一个独立的系统,为减少重复的开发、统一管理,提高整体开发效率而存在。
基础平台应具有良好的开放性和兼容性,采用面向服务的公共管理平台,提供REST API接口,通过统一信息门户、统一权限管理和公共数据交换,整合、集成各类应用系统和各种信息资源,实现资源和平台的开放共享。
基础平台整体建设采用先进的理念和思想、成熟的技术与设计方法,符合当前潮流与未来发展趋势,以便跟上信息技术的发展,具有较强的生命力,具有长期使用价值。
基础平台建设的核心目的就是“易用”,须坚持易用的设计原则,紧紧围绕开发的实际需求,在满足产品要求的前提下,以尽可能少的投入,取得尽可能大的效益。
基础平台必须具有良好的稳定性,保证持续运行时间长、故障间隔大、无故障时间长。
基础平台必须具有良好的可扩展性,对于校园管理模式的变化、管理体系的调整、业务流程的改变等,能够通过规则引擎简便配置即可快速适应变化,满足学院的需求。
基础平台采用版本控制机制与更新包技术,能够简便快捷地完成整体或部分的版本升级。
基础平台的用户包括部门的管理人员、工程师,必须坚持易维护的设计原则,确保结构清晰、界面友好、操作简单、维护方便。
基础平台通过身份认证、角色定义与权限分配,确保每个用户能且只能访问相应的信息资源与应用服务。
平台在满足现在开发需求的同时,能够兼顾公司的发展现状,设计一套能够满足未来一段时间发展的标准,并且在全局建设过程中能够持续的升级、维护标准。
2. 逻辑架构视图
系统采用4层微服务架构,分别是展示层、应用层、服务层、数据资源层。
4.1职责划分与职责确定
4.2接口设计与协作机制
Ecloud系统中,管理系统的实现技术类似,通过各个分层之间的协作来实现增删改查。下图以角色管理的增加功能为例说明各个分层之间的协作机制。
1. 用户通过Management UI增加角色页面一个角色,Management UI调用应用层Role Business的Add方法,同时把接收到Model实体对象传递到过去。
2. RoleBusiness层调用核心服务层和基础服务层服务,同时把Model实体对象传递到过去,进行处理。
名称 |
说明 |
com.xx.platform.cache |
缓存组件包,包含缓存相关类。属于公司级的公共组件 |
com.xx.platform.common |
Ecloud项目的公共功能类 |
com.xx.platform.dto |
显示业务实体类 |
com.xx.platform.vo |
持久化实体类 |
com.xx.platform.dao |
数据访问层 |
com.xx.platform.service |
服务逻辑层 |
com.xx.platform.controller |
业务逻辑接口层组件,应用真实的业务逻辑类 |
com.xx.platform.exception |
系统的异常类 |
com.xx.platform.interceptor |
拦截器类 |
com.xx.platform.utils |
系统的工具类 |
com.xx. platform.configuration |
系统的配置类 |
1. Dao类分为接口XXDao和实现类XXDaoImpl及数据库映射文件XXDao.xml。
2.Service类分为接口XXService和实现类XXServiceImpl。Service分核心服务和基础服务。
4.Vo和Dto类继承基类BaseVO, Dto面向页面和业务处理,Vo面向持久化。
5.前端页面采用freemarker生成html,简单高效。
6. Exception 类继承基类BaseException。
4.4开发运行及使用
采用java和.NET开发,部署在tomcat8和iis上,
3. 物理架构视图
1. 应用服务器、CAS服务器、service服务器、管理服务器、数据库服务器部署在一个局域网内部。
3. CAS服务器负责单点登录功能,需要保证高可用性,因此至少需要部署包含两台服务器的集群。
4. 管理服务器作为部署Management UI的WEB服务器,通常情况下部署一台服务器即可。
5. 系统管理员、用户通过Internet与分别与管理服务器、应用服务器链接。
7. 采用docker、k8s部署到容器,实现集群的自动负载均衡和管理,提高性能和稳定性,简化运维。
l 应用服务器:运行业务系统。WindowsServer 2013、iis+tomcat8
l service服务器:运行服务系统。WindowsServer 2013、iis+tomcat8
l 管理服务器:运行管理系统。WindowsServer 2013、tomcat8
l 数据库服务器:运行数据库系统。Linux、MySQL5.6、Redis3。
l 缓存服务器:运行Redis系统。Linux、Redis3。
为了减少硬件的成本,可以把管理系统部署在应用服务器上,省去管理服务器。各个模块可以分别部署,便于灵活修改升级发布。Service服务器可以根据访问量进行集群和负载均衡。
大项目微服务架构设计相关推荐
- 微服务架构设计总结实践
- 目录 - 一.微服务架构介绍 二.出现和发展 三.传统开发模式和微服务的区别 四.微服务的具体特征 五.SOA和微服务的区别 六.如何具体实践微服务 七.常见的微服务设计模式和应用 ...
- (转)微服务架构 互联网保险O2O平台微服务架构设计
http://www.cnblogs.com/Leo_wl/p/5049722.html 微服务架构 互联网保险O2O平台微服务架构设计 关于架构,笔者认为并不是越复杂越好,而是相反,简单就是硬道理也 ...
- 微服务架构设计实践系列之五:架构准备阶段
微服务架构设计实践系列之五:架构准备阶段 原文:微服务架构设计实践系列之五:架构准备阶段 版权声明: https://blog.csdn.net/beyondself_77/article/detai ...
- 北达软微服务架构设计与实践圆满结束
2016年10月26-27日,为期两天的微服务架构设计与实践在北京大学成功举办.随着新一代信息技术的快速发展,业务需要快速变化.快速创新,互联网的连接带来了大的并发量和数据量.从单机架构走向分布式架构 ...
- 一张图搞懂微服务架构设计
前言 当前,微服务架构在很多公司都已经落地实施了,下面用一张图简要概述下微服务架构设计中常用组件.不能说已经使用微服务好几年了,结果对微服务架构没有一个整体的认知,一个只懂搬砖的程序员不是一个好码农! ...
- 微服务架构设计实践系列之三:软件架构设计思想
微服务架构设计实践 目 次 1 序言 2 微服务 3 软件架构设计思想 4 微服务架构设计实践 4.1 项目概述 4.2 架构准备阶段 4.3 概念架构阶段 4.4 细化架构阶段 4.4.1 业 ...
- 保险o2o微服务架构设计
开发环境: 编码:UTF-8 工具:Myeclipse 10 SVN:Site-1.8.22 Web服务器:Tomcat7 JDK: JDK1.7. Java EE 5 开发环境:Maven 3 开发 ...
- 你必须了解的微服务架构设计的10个要点!
近来,几乎人人都在谈论微服务.微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活.更能适应现在需求快速变更的大环境等.本文将介绍微服务架构设计中的一些要点. 微服务架构设计时有哪些要点 ...
- Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战
Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台- 什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...
最新文章
- 维护窗口和停机时间 可用率99.99%
- 深度学习核心技术精讲100篇(六十五)-万字长文从ReLU到GELU通讲神经网络激活函数
- web 小程序 ch4 小程序组件
- 十分钟让你明白Objective-C的语法(和Java、C++的对比)
- 如何实现Android端获取RTSP|RTMP流转推RTMP
- 【ES6(2015)】RegExp
- c语言2048代码linux,C语言实现2048小游戏(示例代码)
- C#中Lambda表达式总结
- Android开发汇总帖子
- iOS 网页截取长图
- 经典算法分析:n与lgn
- 邮件监控云上脚本执行进度
- 在Spring中采取事务处理
- linux系统scsi硬盘,Linux系统中SCSI硬盘的热拔插
- 程序员未来职业规划分析
- 基于FPGA的图像浮雕效果实现
- java fail 方法_java中的fail是什么意思
- cmd-ping命令
- 【读书笔记】Linux内核完全注释第二章:微型计算机组成结构
- matlab矩阵检索、嵌套,矩阵操作笔记
热门文章
- c++引用另一个类的方法_利用CVE20191132:Windows内核中的另一个NULL指针取消引用...
- comsol稀物质传递_COMSOL电弧仿真
- linux 自动获取ip和dns,linux 配置IP和DNS
- 建行计算机招聘考试考什么,银行招聘考试考什么
- 提取数据_EasyStat如何提取数据+个性化出图
- 如何提高lstm的预测精度_如何提高失重秤的喂料精度?你需要了解这些!
- QT每日一练day21:鼠标事件
- 视觉SLAM——D435i运行ORB-SLAM2-RGB-D(依赖ros版)
- 集合拆成固定长度的小集合_《集合啦动物森友会》钓鱼怎么玩?钓鱼小技巧攻略分享...
- 双层玻璃窗的功效模型matlab,数学建模实例双层玻璃的功效