当前位置: 首页 > news >正文

微服务概述之架构演变

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

写在前面的话

跟同事闲聊,大部分同事对微服务的困惑来源与两点 1.各种名词,不太明白意思 2.对微服务的整体架构不太了解,管中窥豹,比较困惑 所以试着整理以下内容交流探讨,因目前做的ERP系统,所以以ERP系统来进行演化说明, 各ERP模块名词,来源与ORACLE EBS

1.单体结构

1.1 初始阶段

公司刚发展,才一两百的时候,上了一个ERP系统,那时候系统业务量比较小, 所有的代码、数据库、文件都部署在一台服务器上。

1.2 应用服务与数据服务分离阶段

随着公司业务的发展,一台服务器逐渐无法满足需求,越来越多的人来访问,导致性能越来越差,越来越多的数据导致存储空间不足,这时候需要将应用分离;整个网站有三台服务器,应用服务器、文件服务器、数据库服务器

1.3 增加缓存

但是随着公司业务发展到全国,使用的用户越来越多,数据库压力太大导致访问延迟,影响网站的性能,用户体验受到影响。分析后发现,大量的查询来源与ERP-AP ERP-AR ERP-GL 等财务模块的查询操作,增加缓存服务器,对大量发票,应收应付账款来查询进行缓存

2.集群结构

使用缓存后,数据库的访问压力得到缓解,但是单一服务器能处理的连接请求有限 ,在使用高峰,应用服务器会成为整个网站的瓶颈,此时就需要使用到应用服务器集群,增加几台服务器来分担原有服务器的访问及存储压力。

2.1负载均衡

当应用服务器有多台时,例如

192.168.5.1:8089 192.168.5.2:8089 192.168.5.3:8089

当出现三台应用服务器,但是用户只有一个入口www.erp.com,此时就需要在三台服务器之前,出现一台负载均衡服务器(nginx),来统一协调分发用户的请求,使三台服务器平均承担这些请求

2.2反向代理

用户通过www.erp.com来访问负载均衡代理服务器,由代理服务器进行分发请求,称之为反向代理;客户端感知不到代理的存在

2.3正向代理

比如大家常用的VPN工具,访问www.google.com时,无法进行访问;通过登陆到国外的代理服务器,让代理服务器来访问google.com就能访问成功,称之为正向代理。正向代理,隐藏了真实的请求客户端,服务器端不知道真实的客户是谁,客户端的请求的服务都被代理服务器代替来请求了。

2.4数据库读写分离

当网站使用缓存和集群后,绝大部分数据的读写操作可以不通过读取数据库完成。单仍有一部分读操作(缓存访问不命中、缓存过期)和全部的写操作需要访问数据库,当用户量和高峰数据量时,数据库应为负载压力过高,而成为网站的瓶颈,再此我们做数据库的主从备份,来进行读写分离,一台服务器为主数据库服务器,只做修改更新删除操作,另外一台服务器做查询操作,两台服务器从过主从复制机制,把主服务器的数据同步到从服务器上,这样当有应用服务器做读取查询操作时,就可以通过从服务器来读取数据

3.分布式系统

随着公司业务发展,用户规模越来越大,基于全球复杂的业务环境,各国业务合同,海关仓储流程,财务结算等业务都不一致,系统代码越写越大,部署服务越来越慢,一点改动,所有系统模块流程要全部测试一遍,才能上线,上线流程时间长,部署时间长,无法跟上公司业务发展,所以把一个网站拆分成许多不同的应用,每个应用进行独立开发、测试、部署、运维,应用之间通过消息队列的数据分发,或者访问同一个数据存储来构成一个关联的完整系统 例如 ERP这个系统拆分成

财务类: ERP-GL 总账管理系统 ERP-AP 应付账管理 ERP-AR 应收帐管理 ERP-PA 项目会计 ERP-FA 固定资产管理 分销类 ERP-INV 库存管理 ERP-PUR 采购管理 其他 ERP-BIS 商业智能分析系统 ERP-DOC 公共文档存储系统

4.微服务架构

微服务架构实际上是相对于SOA而言,以去中心统一化为特点,微服务架构大体是从互联网企业中兴起的,由于大规模用户,对分布式系统的要求很高,并且业务发展快速,迭代周期很短,一周可能发布一个版本,且不同子系统的发布周期不一样,子系统也不像原有企业计算分布式那样采用集中式存储。 以淘宝的中途岛架构为例,采取前后端分离的方式,对单个业务系统内部实现真正的组件化,并且不同服务之前采用轻量级的交互机制进行通讯。每个服务子系统之间有明确的边界,以子系统为分割,并且不同子系统根据其业务特点,采用不同的语言架构和数据存储方式,运行在自己的容器中。当Docker容器出现、结合敏捷开发管理等方式后,微服务才真正好的落地.当然微服务也带来了改动测试个系统的沟通成本及复杂度,运维和监控的复杂度

5.云服务

系统既然解决了如此多的技术问题,业务复杂度也足够包含,那么可以把整个ERP系统打包成小微型企业、小型企业、中大型企业的解决方案,作为云计算平台的一部分,中小企业不用在去关系技术架构与业务处理,只需要按需付费,就可以是网站随着业务的增长获得更大的存储空间更多的计算资源,和贴合公司业务的业务服务。

参考: 


[大型网站技术架构 核心原理与案例分析-李智慧](https://item.jd.com/11322972.html)
[CSND-博文:面向服务与微服务架构](http://blog.csdn.net/mindfloating/article/details/24583369)

转载于:https://my.oschina.net/Alexyeh/blog/1620881

相关文章:

  • 数据分区------《Designing Data-Intensive Applications》读书笔记9
  • MySQL数据库锁定机制
  • mybatis架构分析
  • SQL必知必会笔记
  • 栈------表达式求值
  • UFPS入门: Unity FPS 教程
  • .NET Core 2.1路线图
  • 进程状态
  • linux运维面试精选
  • 链栈的实现
  • mysql字符集乱码
  • JavaWeb项目架构之NFS文件服务器
  • 应该怎么开始学习? study is a journey!
  • 17、文件IO详解及实例
  • TiDB 在 Ping++ 金融聚合支付业务中的实践
  • 【Leetcode】101. 对称二叉树
  • [数据结构]链表的实现在PHP中
  • 「译」Node.js Streams 基础
  • 2017 前端面试准备 - 收藏集 - 掘金
  • CSS 提示工具(Tooltip)
  • Java 内存分配及垃圾回收机制初探
  • Javascript编码规范
  • Laravel 实践之路: 数据库迁移与数据填充
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • SpringBoot 实战 (三) | 配置文件详解
  • Spring声明式事务管理之一:五大属性分析
  • 测试如何在敏捷团队中工作?
  • 构建二叉树进行数值数组的去重及优化
  • 好的网址,关于.net 4.0 ,vs 2010
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 你不可错过的前端面试题(一)
  • 前端
  • 前端攻城师
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 一些关于Rust在2019年的思考
  • 用Visual Studio开发以太坊智能合约
  • nb
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • #DBA杂记1
  • #NOIP 2014# day.2 T2 寻找道路
  • #QT(智能家居界面-界面切换)
  • #Z2294. 打印树的直径
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (第二周)效能测试
  • (二)斐波那契Fabonacci函数
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (正则)提取页面里的img标签
  • (转)利用ant在Mac 下自动化打包签名Android程序