什么是微服务和容器?首先,什么是微服务?微服务是一种架构类型,它将应用程序拆分为多个服务,这些服务具有构成整个应用程序的细粒度功能。每个微服务都将具有特定于您的应用程序的不同逻辑功能。与单体架构相比,微服务是应用程序架构领域的一种更现代的方法,在单体架构中,应用程序的所有组件和功能都驻留在单个实例中。大家可以参考下图单体架构和微服务架构的对比。我们要把微服务放在哪里?在容器中。容器是软件包,其中包含运行软件所需的一切,例如代码、依赖项、库、二进制文件等。Docker是一种用于构建和运行容器的流行工具,但Kubernetes正在迅速成为在企业环境中编排多个容器的行业标准。与虚拟机相比,容器可以共享操作系统内核,而不是像在一台主机上构建多个虚拟机那样拥有一份完整的副本。虽然可以将微服务放置在多个虚拟机中,但在这种情况下通常会使用容器,因为它们占用的空间更少并且启动速度更快。为什么要使用微服务架构?微服务架构的创建是为了解决人们在单体应用程序中遇到的问题。微服务应用广泛,一些大型网站已经将单体应用转为微服务。使用微服务架构的一些好处是,与单体应用程序中的大型代码库相比,开发人员只需处理小型代码库。当应用程序组件松散耦合时,开发人员可以轻松理解源代码,而不会减慢开发速度。如果您使用更少的代码行,您的IDE显然会更快。开发人员不必处理仅在单体应用程序中才会出现的各种功能的复杂性和依赖性。开发人员的责任将得到更明确的定义。团队工作可以按应用程序的组件或微服务进行分配。代码审查将加速。与单体应用程序相比,更新速度更快,无需构建和部署所有内容。应用程序的技术堆栈可能因微服务而异。应用程序不再需要依赖于一种语言或库。微服务可以利用开发人员认为合适的许多不同的编程语言。可以使用多语言微服务,如下图所示。持续交付会更容易。对于简单的更改,使用微服务消除了像整体应用程序一样重新部署所有内容的需要。您可以选择只重建和部署需要更新的微服务。频繁更新会加速。可扩展性独立于每个微服务。您可以选择根据您的应用程序所需的资源来扩展其每个组件。无需像整体应用程序那样构建所有内容的多个实例。扩展微服务将有效利用可用资源,而不是像在单体应用程序中那样拥有整个应用程序的多个副本。数据可以去中心化。您可以选择为您的微服务使用不同的数据库/存储。如果非关系数据库比关系数据库更适合您的微服务,那么非关系数据库就是首选数据库。微服务也可能只需要一个简单的密钥存储数据库,如Redis。如下图所示,您可以选择使用Cloudant、MySQL和MongoDB的组合。您可以利用不同的数据库来存储不同的数据类型。隔离故障。一个微服务中的错误或缺陷不会导致整个系统崩溃。使用松散耦合的组件,当你的应用程序中的一个微服务出现问题时,其他微服务不太可能受到影响,因为它们都在自己的容器中,并不完全相互依赖。而对于整体式应用程序,如果没有正确识别缺陷或错误,则可能会导致整个应用程序流程瘫痪。缺点是什么?在使用微服务解决单体架构的一些问题时,每个微服务都会出现一系列的问题。如果您试图将单体式应用程序拆分为微服务,第一个挑战就是如何拆分它。您可以选择将它们拆分为多个业务功能,例如一个微服务处理批处理,另一个微服务处理支付服务。最后,您的组件应该只有一小组功能或职责。我在微服务架构中看到的一些问题如下:一旦微服务的数量增长,就很难跟踪。持续集成和持续交付的初始设置也很困难,因为您需要处理拥有多个微服务的额外复杂性。复杂。微服务需要加强协作,尤其是涉及多个团队时。如果微服务需要与其他微服务交互,它们还会引入更多的网络调用,而在单体应用程序中则不会出现这种情况。部署微服务并不像部署应用程序实例那么简单。您还需要考虑许多其他问题:如何处理各个微服务之间的通信,解决错误以避免破坏其他微服务,以及在每个组件中添加更多测试用例。查找和跟踪应用程序中的错误/错误。如果您的微服务只有一条路径,则更容易找到,但如果一个微服务与许多其他微服务通信,则仅查找错误可能会花费很多时间。做微服务路由需要更多的工作。您需要花时间配置和控制微服务流。您还需要跟踪微服务版本并对它们的路由进行故障排除。微服务比单体应用程序消耗更多的资源。虽然我提到的优势之一是更好、更高效地使用资源和可伸缩性,但所有组件都需要自己的实例和容器,这会导致内存和CPU使用率增加。帮助您使用微服务Kubernetes的工具Kubernetes是一个容器编排平台,可以部署、扩展和管理所有容器。它自动部署容器化微服务。这使得管理应用程序的所有组件和微服务变得更加容易。您可能想了解Docker如何容器化微服务。IBM公开发布了一款产品IBMCloudKubernetesService,它可以为您管理集群。IstioIstio可以解决微服务的一些弊端。Istio是一种服务网格,可进一步帮助您管理微服务。Istio可以安装在Kubernetes之上,以帮助您跟踪和监控微服务。同时,它还可以帮助您快速跟踪应用程序中可能存在的错误和缺陷。Istio还可以管理微服务的流量,比如管控流量。可以轻松配置路由。Istio还可以在微服务中提供安全保证,例如使用双向TLS,或限制其对外部服务的访问。您还可以在IBMCloudKubernetesService上安装Istio。总结以我个人的经验来看,使用容器编排平台是微服务构建应用的必经之路。Kubernetes是一个受开发人员欢迎的平台,因为它可以快速将应用程序从开发阶段带到生产阶段。更好的是,它是开源的!对于开始构建自己的应用程序的开发人员,他们应该确定使用微服务是否比单体应用程序对他们更有利。他们应该考虑应用程序的长期易用性和可扩展性。从单体架构开始非常好,但是一旦您的应用程序扩展,将它们分解为微服务只会变得更加困难。在这种情况下,在开发初期就开始微服务显然更有利。对于现有的单体应用程序,开发人员应该考虑如何分离应用程序中的哪些组件。尽管存在一些缺点,但微服务在开发人员和企业中仍然很受欢迎,因为它们对应用程序和满足用户需求极为有利。一旦使用了正确级别的微服务,由于其灵活性,开发人员和企业可以快速开发或更新应用程序。
