程序员的修神之路是?
作者 | 菜菜
责编 | 刘静
YY妹:菜菜哥,我最近需要做一个项目,老大让我用微服务的方式来做
菜菜:那挺好呀,微服务现在的确很流行
YY妹:我以前在别的公司都是以SOA的方式,SOA也是面向服务的方式呀
菜菜:的确,微服务和SOA有相同之处
YY妹:没太听明白,SOA和微服务有什么相同和不同吗
相同点和不同点都很多
无论是SOA还是微服务架构,都是系统发展到一定程度衍生而出的一种解决方案,都是为了解决系统存在的弊端而产生的架构方案。当系统一开始采用集中化部署的时候,随着系统模块越来越多,自然而然就产生了拆分的方案。
无论是SOA还是微服务架构都是根据业务进行拆分的结果,但是他们又有着很多不同。
在SOA系统架构中,服务之间的调用采用ESB(企业服务总线)来进行通信。ESB负责服务定义、服务路由、消息转换、消息传递,总体上是重量级的实现。简单来说ESB就是一根管道,用来连接各个服务节点。
微服务强调使用统一的协议和格式,例如,RESTful 协议、RPC 协议,无须 ESB 这样的重量级实现。也有的系统为了统一管理微服务系统,会部署一个统一的网关系统,网关是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能,每个服务都需要去服务管理中心去主动注册,这样才能实现服务的自动发现。
整体上来说,SOA 的服务粒度要粗一些,而微服务的服务粒度要细一些。例如,对一个大型企业来说,“员工管理系统”就是一个 SOA 架构中的服务;而如果采用微服务架构,则“员工管理系统”会被拆分为更多的服务,比如“员工信息管理”“员工考勤管理”“员工假期管理”和“员工福利管理”等更多服务。
至于微服务的粒度要到什么程度,仁者见仁,智者见智,有的小伙伴说直到服务不能拆分为止,其实我认为这种想法是错的,一个微服务的拆分粒度,还是要根据你的具体业务来划分,根据你的依赖模块关系来划分,不要盲目拆分成太多颗粒度小的服务,这样在治理上会给团队带来很多困扰。举一个简单例子:员工管理系统中,如果考勤管理和假期管理之间业务关系非常密切,而且有很多操作需要事务性原子操作,你可以考虑将这两个微服务合并。
SOA鼓励组件的共享,而微服务尝试通过“上下文边界”来最小化共享。
无论是SOA还是微服务,每个独立的系统都可以采用不同的编程语言来开发,只要对外提供的接口协议符合标准就可以。在开发方面,由于微服务会采用划分粒度更小的策略,所以实际情况中服务的数量会比SOA架构方式要多很多,微服务的架构理念要求“快速交付”,相应地要求采取自动化测试、持续集成、自动化部署等敏捷开发相关的最佳实践。如果没有这些基础能力支撑,微服务规模一旦变大(例如:超过 20个微服务),整体就难以达到快速交付的要求,这也是很多企业在实行微服务时踩过的一个明显的坑,就是系统拆分为微服务后,部署的成本呈指数上升。
如果企业内部快速交付的基础设施比较薄弱,采用微服务架构方式后期也许会遇到部署成本的问题。
微服务适合那些需要快速交付,比较轻量级的互联网应用。现代互联网变化迅速,每个系统都需要快速尝试,快速交付,这也是产生微服务架构的主要原因之一。由于每个服务都可以单独部署,所以在那些大并发的情况下,更容易横向扩展,就算是某个服务down掉,也不会影响其他的服务正常运行。而SOA由于ESB的存在,一旦ESB挂掉,会影响到所有系统正常运行。
SOA相比较微服务,更适合那些访问量较小,但是业务体系庞大,复杂的企业级系统。当一个企业级的系统发展到一定程度,SOA会应运而生,而且这个系统还会延续很长时间,期间还会采用不同的技术栈来开发不同的系统,这些系统会不断集成进来,如果想要推倒重来或者进行大规模的优化,人力物力上根本得不偿失,所以这样的系统只能以兼容的方式继续,而承担各个异构系统通信的重要组件就是ESB。
YY妹:听你这么一讲,我好想明白了很多,下次出去面试就又多了一分把握菜菜:每种技术都有它自己的适用场景,不要被微服务的吹嘘迷失了方向
【End】
看完就懂!这样学python很有用
https://edu.csdn.net/topic/python115?utm_source=csdn_bw
热 文 推 荐
☞
点击阅读原文参与开发者大调查,好礼送不停!
程序员的修神之路是?相关推荐
- 菜鸟程序员的超神之路
博主说:本文主要讲述了从校园到职场的六大误区,值得即将毕业的在校大学生借鉴,他山之石可以攻玉,要善假于外物. 正文 码农咖啡馆近日收到一位大三学生的留言,表达了实习期的一些困惑:压力大.工作内容琐碎. ...
- 学会思考--菜鸟程序员晋升大神之路
"菜鸟"和"大神" 刚刚走出就业的程序员,技术是刚刚起步的基点.那下面我们就聊一聊有关技术的东西.首先请您先想想这几个问题.现在社会上有很多程序员,那您是否可想 ...
- 程序员的修仙之路-筑基篇
也许很多人都被这个文章的标题吓到.吸引或者迷惑,那我告诉你,这篇文章不是一个程序员的穿越玄幻,不是一个程序员的无聊之谈,里面没有算法公式,亦无程序员的心路历程.它只是一套学习方法与学习工具的使用.这只 ...
- 菜鸟程序员的超神之路——从校园到职场
码农咖啡馆近日收到一位大三学生的留言,表达了实习期的一些困惑:压力大.工作内容琐碎.导师又没多少耐心指点.看到这篇幅很长的苦恼,我突然觉得有责任去为他(她)做些事情.这世界上仅有极少的天分和运气兼备的 ...
- 多个容器一起打包_程序员修神之路容器技术为什么会这么流行(记得去抽奖)
菜菜哥,你上次讲的kubernetes我研究了一下,你再给我讲讲docker呗 docker可很流行呀 kubernetes是容器编排技术,容器不就是指的docker吗? docker可不等于容器哦, ...
- 程序员修神之路--晦涩难懂的CAP,是否完全正确?
微信搜一搜 架构师修行之路 菜菜哥,帮忙解决一个问题 是不是面试又被虐了? 是的呢,这次面试官问我什么是CAP? 这个可就说来话长了...... 01 PART CAP 说到CAP,首先不能不说分布式 ...
- 程序员修神之路--简约而不简单的分布式通信基石
点击"蓝字"关注,领取架构书籍 菜菜哥,请教一个问题呗 面试又被卡住了? 还是你了解我呀,tcp协议面向连接是怎么回事呢? 这个说详细起来,那本好几百页的tcp协议的书籍你倒是可以 ...
- 程序员修神之路--分布式系统设计理念这么难学?
点击"蓝字"关注我们吧 福利:有件小事想和大家说一下 菜菜哥,问你个问题,为什么现在的系统都设计为分布式系统呢? 这个问题问得好,就像为什么程序员会慢慢脱发一样神奇 01 PART ...
- 程序员修神之路--打通Docker镜像发布容器运行流程
菜菜哥,我看了一下docker相关的内容,但是还是有点迷糊 还有哪不明白呢? 如果我想用docker实现所谓的云原生,我的项目该怎么发布呢? 这还是要详细介绍一下docker了 Docker 是一个开 ...
最新文章
- mac 终端里进入mysql和退出
- 手写一个简单的线程池MyThreadPool
- MySQL不能插入中文字符及中文字符乱码问题
- PHP用单例模式实现一个数据库类
- php soap 用户名密码,PHP SOAP客户端帮助!
- 机器学习 可视化_机器学习-可视化
- css3中的动画学习分享
- java是面向对象还是面向过程_面向对象和面向过程最本质的区别是什么?
- Tesseract OCR iOS 教程
- PHP中英双语网站的设计思路
- 计算机设计大赛校赛攻略(郑州轻工业大学)
- Toshiba e-STUDIO5616AC 一体机驱动
- 计算机画图保存的图片怎么找到,想知道电脑截图保存在哪儿找
- sql server 2000 各版本的区别
- 使用DeepAR实现股价预测
- AI芯片独角兽寒武纪 - 诚聘虚拟化/深度学习框架/系统软件研发工程师
- 信息隐藏——扩频水印
- 非专业级软件能力认证(CSP-J/S)
- 最新《JPA入门到精通JAVA进阶项目实战》
- 写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息