微服务架构简介(单一架构VS微服务架构)

前言

最近,关于微服务有很多争论。几乎所有的IT公司都在讨论微服务。当我们将微服务跟传统的单一架构比较时,可以很容易理解它。
几乎每个企业应用都有相似的分层架构:
1.表现层:用户的交互界面。
2.业务逻辑:应用的内在业务逻辑。
3.数据库访问:几乎所有的应用都需要访问数据库,SQL或NoSQL都行。
4.应用集成:应用之间交互是相当常见的。这些通常是通过Web服务调用(SOAP或REST)或消息传递来实现的。

即使应用有清晰的、逻辑上模块化架构,但是,大部分应用会被作为单一架构打包和发布。这么做是有一定优势的。

单一架构的优势

1.开发相当简单。
2.测试也非常简单。仅仅启动应用,然后开始端对端的测试。我们也能毫无困难的使用Selenium进行自动化测试。
3.部署单一应用程序是很简单;只需将打包的应用程序复制到服务器。
4.扩展是很简单的。我们仅仅需要增加单一架构的新实例。并通过负载均衡器将负载分配到新实例上,但是,随着整体应用程序的规模增长,可伸缩性将成为一个严重的问题。

单一架构的劣势

1.灵活性: 单一架构不够灵活。我们不能使用不同的技术。技术堆栈从一开始就决定了,并自始至终遵循。一旦开发成熟,有时就很难升级技术堆栈版本,更不用说增量地采用新技术了。
2.可靠性: 不可靠。如果一个特性出现故障,整个应用程序可能会出现故障。
3.开发速度: 单一架构的开发非常缓慢。对于新的团队成员来说,理解和修改大型单一架构应用程序的代码是很困难的。代码质量会随着时间的推移而下降。随着代码库的增大,IDE会过载,速度会变慢。应用程序越大,启动时间越长。所有这些因素都会对开发人员的生产力产生巨大的影响。
4.构建复杂应用: 由于技术方面的限制,很难构建复杂的应用程序。
5.可伸缩性: 单一架构的应用程序一旦变大,就很难扩展。我们可以创建新的单体实例,并要求负载均衡器将流量分配给新的实例,但是整体架构不能随着负载的增加而扩展。应用程序实例的每个副本都将访问所有数据,这将降低缓存的效率,并增加内存消耗和I/O流量。而且,不同的应用程序组件有不同的资源需求——一个可能是CPU密集型组件,而另一个可能是内存密集型组件。使用单一架构,我们不能独立地扩展每个组件。
6.持续部署: 持续部署极其困难。大型单一架构的应用程序实际上是频繁部署的一个障碍。为了更新一个组件,我们必须重新部署整个应用程序。

由于上述单一架构应用程序的缺点,微服务体系结构正日益受到人们的欢迎。那么什么是基于微服务的体系结构呢?

简而言之,微服务体系结构风格是一种将单一架构应用程序开发为一组小服务的方法,每个小服务都在自己的流程中运行,并与轻量级机制通信(通常通过RESTful web服务或消息传递)。这些服务是围绕业务功能构建的,可以通过完全自动化的部署机制独立部署。这些服务的集中化管理非常少,它们可能使用不同的编程语言开发,使用不同的数据存储技术。微服务是小型的、可独立部署的、支持云计算的单元。

微服务架构如何解决单一架构的缺点

1.灵活性: 微服务体系结构非常灵活。不同的微服务可以用不同的技术开发。由于微服务更小,代码基础就更少了,所以升级技术堆栈版本并不是那么困难。而且,我们可以毫无困难地逐步采用新技术。
2.可靠性: 微服务体系结构可以非常可靠。如果一个功能崩溃,整个应用程序就不会崩溃。我们可以在相应的微服务中修复这个问题并立即部署它。
3.开发速度: 微服务体系结构中的开发非常快。由于微服务的代码量要小得多,因此新团队成员理解和修改代码并不困难。他们从一开始就很有成效。代码质量维护良好。IDE要快得多。微服务的启动时间要短得多。所有这些因素都大大提高了开发人员的生产力。
4.构建复杂的应用程序: 使用微服务体系结构,很容易构建复杂的应用程序。如果正确地分析应用程序的特性,我们可以将其分解为独立的组件,这些组件可以独立部署。然后,甚至独立组件也可以进一步分解为小的独立任务,这些任务可以作为微服务独立部署。确定微服务的边界非常具有挑战性。这实际上是一个渐进的过程,但是一旦我们决定使用微服务,就很容易开发,因为在技术上没有限制。
5.可伸缩性: 可伸缩性是微服务体系结构中的一个主要优点。每个微服务可以单独缩放。由于单个微服务的大小要小得多,因此缓存变得非常有效。
6.持续部署: 持续部署变得更容易。为了更新一个组件,我们只需要重新部署那个特定的微服务。

正如我前面提到的,当我们将微服务体系结构与传统的单一体系结构进行比较时,可以很容易地理解它,但是在微服务之前,已经有类似的体系结构可用。是的,我说的是SOA(面向服务的体系结构)。SOA已经存在了20年。如果您已经使用过SOA并熟悉它的概念,那么理解SOA和微服务体系结构之间的差异可能会非常令人困惑。事实上,两者的共同点多于不同点。在下一篇关于微服务的文章中,我将介绍SOA、SOA和微服务体系结构之间的相似性,当然还有它们之间的区别。(转自IT牧场)