您的位置:首页 > 运维架构 > Docker

微服务给我们带来了什么

2018-07-17 09:46 302 查看
2018年6月,我的第三本技术书籍《Spring Cloud与Docker高并发微服务架构设计实施》在电子工业出版社出版了,这是一件多么令人振奋的事情。现在我来谈一谈这本书的一些写作心得,跟大家做一个分享。



首先,介绍一下我写这本书的动机和背景。当时,我们正在使用微服务架构进行系统重构,在整个开发和实施的过程中,需要对包括系统设计、开发、测试和运维在内的整个技术团队进行一些培训,并且大家工作也比较忙,培训断断续续有些不连贯,所以为了能够给大家对微服务有一个比较全面和系统地的介绍,我开始有了写一本书的想法。后来刚好有一段时期正好有时间来做这件事情,所以就开始了这本书的写作。
在这本书的写作过程中,我越来越觉得写这本书的必要性和重要性,因为使用微服务的人已经越来越多,而有关微服务的介绍的资料还是比较少的,而且在网络上能搜索得到的资料大多是一些简单的介绍和早期的版本,所以我觉得应该在怎么更好地使用微服务这个角度上,对微服务的使用有一个更深一步的探讨和研究。带着这种想法,给我完成这本书的写作增加了很多动力。
大约花了半年时间,终于完成了这本书的写作,这之中的细节这里就不多说了。写完之后,我还是感到比较满意的。
这本书的主旨就是强调了怎么才能更好地使用微服务。主要内容包括架构设计、系统开发和运维部署三个方面,全书以大家比较熟悉的电商平台为例进行说明,用理论与实际相结合的方式,和通俗易懂的语言详细介绍和说明了使用微服务的方法。
那么,微服务给我们带来了什么呢?如果说微服务帮我们解耦了大而重的项目,帮我们解决了规模化开发的问题,实现了独立设计,减少了系统的依赖性,实现了故障隔离,实现了快速迭代等等,这些技术性很重的语言来说明的话,大家可能不太好理解。那么下面我们通过几个重点来说一说微服务到底给我们带来了什么。

轻量化的好处。

轻量化的设计是微服务设计的一个显著特点,主要使用服务细分和轻量通讯的设计,将本来一个很复杂的系统进行了简易化的设计。使用了轻量化的设计之后,每一个项目的开发将会更加灵活,所以将能做得更好更加极致。轻量化设计将不再使用像ESB(企业服务总线)这样重量的设计,而是使用http和消息来实现应用之间的相互通讯。
轻量化的设计强调,一个能够用简单的方法实现的事情绝不使用复杂的方法。轻量化有时甚至会被习惯势力误认为没有技术含量,因为它的逻辑简单明了,处理问题往往一针见血,戳中要害。我曾经遇到过一个比较奇葩的公司,他们用程序员的代码量来衡量一个人的工作绩效,当然这种方法实行没有几个月就泡汤了。这是一种违背轻量化设计原则的做法,而一个程序员的工作业绩也不能简单地用代码量来衡量。
这里我要借用我们的一位同事李总的话来对轻量化的好处做一个总结,他说,一个好的设计是要学会怎么使用减法,而一个更好的设计是在使用除法。那么,我们可以说,微服务正是使用轻量化的方法,来使用除法设计。

去中心化的优势。

扁平化的服务治理、扁平化的数据管理是微服务架构设计的一大特色,在使用Spring Cloud工具中,我们主要使用了Eureka、Zull、Ribbon等工具组件实现了扁平化的微服务治理。每个微服务也不再有数据中心这样的概念,而是使用独立的数据库。
去中心化的扁平化管理,在现代的企业管理之中,也可以看到明显的优势。在集中式管理的企业中,老板具有绝对的权威,经常是老板说了算,员工的个人能力经常不能够得到很好的发挥,这种风气就是集中式管理的弊端,久而久之,每个员工会逐渐变成没有灵性的听话工具。
我就曾经遇到过这样的企业,当大家在讨论一个设计的时候,不管你有多么奇妙的想法和构思,最终都将抵不过一句话的威力,那就是“这是老板说的”。这句话就像圣旨一样神圣而不可侵犯。
在扁平化管理的企业中,很少有一些条条框框对个人进行约束,而更多的是每个人都有一个更大的发展空间,谁有能力谁就有话语权,每个员工的潜能都能得到激发,每个小团队都能为整个企业的发展发挥最大的效能。

自动化的强势。

微服务本身轻巧灵活的特点将最适合使用Docker来发布,使用Docker和Jenkins,可以很好地实现自动化的构建流程。使用微服务之后,服务将会比较多,使用自动化构建工具来实现CI/CD,即持续集成和持续交付的流程,就显得格外重要。
当无人驾驶、无人机、AI人工智能都这么发达的时候,做为一个程序员,如果还不能享受到自动化所带来的先进性和便利,那将是非常不幸的。例如,我们过去的服务更新和部署,都要守在凌晨的时候进行,这不管对产品设计、程序开发、测试和运维等工作岗位,都是相当艰辛的。使用自动化部署和相关管理措施之后,我们将可以在任何时刻,实现对微服务的零宕机部署。所以,自动化的实施,也将提高产品更新对需求变更的应变能力,始终让我们的产品走在时代的前列。

产品化的长处。

微服务不仅仅是一种技术变革,更重要的是一种设计理念、思想观念的革新。微服务适合用于大型平台的开发,已经不再是简简单单在做一个生命周期非常短暂的项目,而是在做一个有灵性、能够感知时代变迁的生命力强盛的产品。
所以,使用了微服务之后,我们将不仅仅只有微服务,我们还将使用一些先进的技术,容纳到微服务的设计中来。例如使用先进的DDD(领域驱动设计)开发方法,来使用JPA设计,使用非阻塞的多线程技术和反应式编程技术来提高系统的并发能力,等等。
有了这种开放性的设计思维之后,我们将更有信心和勇气来迎接所有未知的挑战,我们将不再害怕具有绝对优势的微服务也有其不足的地方,我们将可以更加放心大胆地使用好的技术,使用先进的设计方法,来充实我们自己,来充实我们的产品,从而创建一个业态中蓬勃发展的生态体系。

现场问答精选:
问:请问微服务使用Docker发布时,对于多实例的微服务管理,镜像和容器的关系是怎样的?
答:首先,因为微服务是一个能够靠自己运行的应用,所以非常适合使用Docker来发布,其次,对于多实例发布,只要创建一个镜像就可以了,它能够被任意多个容器使用。这里补充一点,对于微服务的部署,我们不但使用Docker,还将使用docker-compose,Docker Swarm或者Kubernetes来实现性能更好和更高层次的管理。

问:听说微服务的一个核心组件Eureka2.0已经关闭了开源,这对微服务的使用会有什么影响?
答:刚听到这个消息确实感到有些奇怪,但对于整个微服务体系的设计和使用是没有什么影响的。其实Eureka2.0我曾经试用了一下,感觉它还有一些不完善的地方,实际上,Eureka1.x已经能够满足我们的所有要求,并且我也曾经想使用Consul来替换Eureka,因为Consul是一个更加优秀的注册中心,除此之外,我们还可以使用Zookeeper来做注册中心,它跟Spring Cloud也能配合得很好,并且这也是一个很不错的开源工具。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息