戳蓝字“CSDN云计算”关注我们哦!


作者:谦镒

转自:架构师技术联盟

 

现在,在互联网圈子里,不知道何时微服务这个概念已经深入到了我们圈内的各个角落,似乎如果不赶上这个潮流,公司的产品就将被淘汰了。

这个专场开场时,老师给我们说了个他的一段经历。

一天他邻居问他:“你的微服务课程我可以去听么?”
老师很是惊讶,说:“你做微商的怎么这么好学呀,你知道啥是微服务么?”
邻居说:“微服务不是为微商服务的么?”

当然这略带有点喜剧性了,不过对于微服务,真的是和我们理解的那样么?我在听这场分享之前我一直认为,微服务不就是把业务按照功能模块切割,让他独立出来么?

听完这场分享,对微服务的定义,有了全新的认识。

1、微服务不是简单的模块切割

目前业内对微服务存在的误解有很多,这里ThoughtWorks的架构师和坚老师给我们列出来几点:

  • 构建HTTP服务,实用Docker容器运行它,并且用Kubernets做集群管理,就是微服务

  • 使用API Gateway和服务发现以及服务registry,这就是微服务

  • 使用Spring Boot框架构建http服务,并使用Netflix OSS,这就是微服务

  • 使用Azure Service Fabric 构建并且运行应用程序,这就是微服务

  • 构建轻量级的RESTful API,这就是微服务

  • 有很多框架声称是微服务框架。使用这些框架的任意一种来构建应用程序,这就是微服务

看完这些,我就有点蒙圈了,那到底怎样的才算微服务呢?下面是老师对微服务的一个概括:

微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的进程中,服务间采用轻量级的通信机制互相沟通(通常是基于HTTP协议的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。

同时和坚老师给我们分享了微服务具有以下几点特点:

  • 通过服务进行组件化

  • 围绕业务能力组织

  • 做产品而不是做项目

  • 只能端点与傻瓜管道

  • 去中心化地治理技术

  • 去中心化地管理数据

  • 基础设施自动化

  • 容错设计

  • 演进式设计

我这里的理解是微服务其实是围绕业务能力组织进行划分的一整套服务集群,但是该怎么划分呢?他的粒度是什么呢?

2、别一不小心把微服务切成了小的单体

假设有一天你的系统已经进行了“微服务”改造,由于你的业务发展,新的需求如潮水般涌来,渐渐的发现某些“微服务”开始慢慢的膨胀起来。

发现膨胀的“微服务”有一部分业务又需要拆分了,而且这个服务内部还高度耦合,这不就又变成了,拆分之前的服务了么?

你拆分成的不是微服务,而是一个小的单体。

关于怎么拆分微服务,和坚老师给我推荐了一个叫DDD服务设计的思想:

要求我们从业务视角去分离复杂度,最终目标都是为最求高响应力。

让业务架构和系统架构形成绑定关系,从而当我们去响应业务变化调整业务架构时,系统架构的改变是随之而发的。

虽然短短的两句话,但是要理解做好,真不是那么容易,还待深入学习。

目前微服务只存在一个概念性的阶段,要想将我们现有的服务切分成微服务,按照什么标准进行切分,不同的行业,不同的业务场景,将是不同的,这是一个难题?

当我们辛辛苦苦的把业务切成了一个一个小的服务在跑时,如果哪天业务发展,发现这两个服务还是和在一起跑比较好,这时,你将面临的不是单单的把两个代码合在一起这么简单。

代码上的冲突,修改上下游的依赖,部署架构都将是一个挑战。微服务的合并,比拆分更难。

3、一个完整的微服务离不开完善的自动化运维

当我们的项目被拆分成了微服务在线上跑了,我们的开发看到的将不再是一整个业务的代码,而是一个一个小的模块服务。

我们的开发将面临:我们得把整体的所有服务了解个遍,或者相关的服务模块了解完。

如果不能了解完,将会出现:在版本迭代时,我们修改的代码,能保证这个服务上没问题,不能保证上线后对其他的业务不会有影响。

对于这个问题,微软的MVP陈锋逸老师提出了一个建议,借助一些代码即架构的工具来弥补这块。

微服务落地,我们还将面临,我们的服务散落在各个地方,运维的同事将怎么进行监控,怎么知道此时此刻哪个服务挂了,哪个服务超载了,超载时我们怎么进行扩容,这都是我们要解决的问题。

还有,如果我们辛辛苦苦做成了微服务,在版本发布时,怎么保证线上所有容器的版本一直性,也是要解决的问题。

这一系列的问题就涉及到可持续性交付这块了,从开发提交代码,到测试,到构建,再到测试用例的覆盖,最后到生产这一连贯的工作,怎么让他们自动化?如果做不到自动化,那投入的成本将可能是传统的架构的N倍。

4、结束语

我不是一个架构师,只是一个小小的开发者,所有行文都是按照一个开发者的角度结合今天老师讲的所写,所以可能有诸多不恰当的措词,欢迎指正。

福利

扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!

推荐阅读:

  • 都道业务提升坑大事儿多,但英特尔云方案却说“简单”

  • 云有约 | 蚂蚁金服bPaaS究竟是什么?

  • 再不编程就老了!05 后比特币专家准备赚个 134,000,000 元!

  • Pig变飞机?AI为什么这么蠢 | Adversarial Attack

  • 互联网没有春天

  • 麦克阿瑟奖得主Dawn Song:区块链能保密和保护隐私?图样图森破!

  • 2019年最值得关注的五大微服务发展趋势

喜欢就点击“好看”吧

公司转型微服务,真的有必要吗?相关推荐

  1. 传统行业转型微服务的挖坑与填坑

    原文:传统行业转型微服务的挖坑与填坑 一.微服务落地是一个复杂问题,牵扯到IT架构,应用架构,组织架构多个方面 在多家传统行业的企业走访和落地了微服务之后,发现落地微服务是一个非常复杂的问题,甚至都不 ...

  2. Spring Cloud 与微服务学习总结(14)—— 云原生时代,如何从 Java 开发者转型微服务?

    前言 根据维基百科定义,微服务不是整体应用程序中的一个层.相反,微服务是一个独立的业务功能,具有清晰的接口,并且可以通过内部组件实现分层架构.从战略角度来看,微服务架构基本上遵循"做一件事, ...

  3. 在公司的微服务上搞破坏真是太开心了

    这是四年前伦敦一个技术大会上的一场非常独特的分享,没想到一场技术大会上能有这么幽默的另类架构师,作者以反讽的形式举出了 10 个微服务环境下对系统搞破坏的 tips.我看了很多遍,其中的案例其实日常研 ...

  4. 花了一个月时间梳理了一下公司的微服务核心架构,原来也不是太难...

    作者:tengshe789 链接:https://urlify.cn/zYJzee 在公司学习了接近一个月. 一个月内,从0开始开始接触分布式微服务架构,给了我不小的收获.今天,我来从头到尾梳理一下, ...

  5. 为什么大公司一定要使用微服务?

    这几年在 Java 工程师招聘时,会看到很多人的简历都写着使用了 Spring Cloud 做微服务实现,使用 Docker 做自动化部署,并且也会把这些做为自己的亮点. 而比较有趣的这其中以小公司出 ...

  6. java 搭建企业应用框架_溯源微服务开发体系:一位Java开发者的转型思考

    作者丨赵钰莹 简单来说,微服务是将大型单体应用程序和服务拆分为数个甚至数十个微服务,可扩展单个组件而不是整个应用程序堆栈,从而满足服务等级协议.然而,这个过程涉及很多问题需要解决,比如拆分原则.容量规 ...

  7. 单体应用到微服务架构转型-实践过程总结

    点击上方"猿芯",选择"设为星标" 后台回复"1024",有份惊喜送给面试的你 原文 https://www.toutiao.com/art ...

  8. 为什么我不推荐你盲目追求微服务?迟早要吃亏!

    飒然Hang 读完需要 15 分钟 速读仅需 1 分钟 这几年在Java工程师招聘时,会看到很多人的简历都写着使用了Spring Cloud做微服务实现,使用Docker做自动化部署,并且也会把这些做 ...

  9. 微服务时代之2017年五军之战:Net PHP谁先死

    微服务时代之2017年五军之战:Net PHP谁先死 1.引言 其实我一直是个懒人,开博也有好几年了,但是一直懒得写文章,主要怕打字麻烦, 手机都是用讯飞语音输入的, 可惜博客里面很多专业性的词语,用 ...

最新文章

  1. 线下活动 | 揭秘大数据背后的京东虚拟平台(免费报名中)
  2. chrome浏览器ios版本迎来“信用卡扫描器”代码
  3. shell 自动回车_macos开机自动屏蔽独显
  4. HGOI 20190816 省常中互测8
  5. java中static关键字的作用_C++ static关键字到底有什么作用
  6. python创建员工_Python综合练习之创建员工信息表
  7. Spring Boot Web简介
  8. 前端vue生成二维码
  9. jeecg-boot环境搭建
  10. HTTPS 证书认证流程
  11. 解决微信公众平台IP白名单
  12. 如何利用 XMind 高效学习?
  13. LDP机制补充与配置(华为设备)
  14. [经典面试题][淘宝]求首尾相连数组的最大子数组和
  15. Day134-136.尚品汇:平台属性接口、SPU、跨域问题、配置持久化、MinIO 分布式文件存储系统
  16. 给孩子积极心理暗示的语句实操
  17. 如何修改pdf格式文件
  18. 钉钉机器人推送表格图片
  19. HDFS原理 | 一文读懂HDFS架构与设计
  20. 综合练习笔记2(用户管理系统)

热门文章

  1. java8源代码_java8 源码解读
  2. 唯有自己变得强大_真正的自立,唯是让自己变得更加强大
  3. idea添加scala环境_idea怎么在线安装scala并且启动'
  4. corel产品注册样机安装代码_为你的产品创建一个高逼格的宣传片
  5. 基于dde的vb和matlab,基于VB和DDE技术的组态王通信协议转换
  6. 35岁北大博士拟升市长
  7. 破洞牛仔裤中的几何学:简单理解万有覆叠问题
  8. 全国首个人工智能专业,怎么学?
  9. php多线程 static变量,private static和public static的比较:多线程间
  10. node.js http客户端