当前位置: 首页 > 后端技术 > PHP

微服务架构是一种怎样的存在?

时间:2023-03-29 14:43:37 PHP

文章由专业的Laravel开发者社区转发,原文链接:https://learnku.com/laravel/t...构建大型应用入门构建大型应用入门不管无论现在有多大影响,分布式系统仍然是最被忽视的话题之一,至少在大学层面是这样。没有多少学生了解容器化和容错等概念,而且您永远不会看到系统项目赢得黑客马拉松。尽管如此,我认为至少对当今大型系统的工作原理有一个简单的了解是非常重要的。这个故事是针对初学者的系列中的第一个,例如在1-2年级接受过普通计算机科学教育的人或具有自学Web开发经验的人。前几篇文章将重点介绍主要概念并深入探讨技术细节。然后,我希望探索与网络、Kubernetes和我在研究中看到的有趣事物相关的主题。第一个非常简单,旨在解释微服务背后的动机和基本概念。分布式系统使互联网保持运行。过去,应用程序是独立的。可能包括Web服务本身和存储系统在内的应用程序只打包到一个或两个二进制文件中。然后将这些二进制文件上传到服务器以直接在机器上运行。在80年代和90年代,这个系统已经足够了,但今天谷歌每天收到35亿次搜索查询,没有任何服务器足够强大来处理它们。过去,工程师会购买更好的服务器、更好的电缆等等。随着Internet的发展和摩尔定律的终结,这种方法很快变得不可行,并且很明显需要水平扩展而不是垂直扩展。相反,与其购买更好、更昂贵的硬件,不如购买大量便宜的服务器来分配负载。最早的横向扩展只是简单地运行Web服务的多个副本。但随着云服务的发展,微服务架构迅速占据了市场。微服务是指将大型应用程序拆分为称为服务的独立组件,每个组件执行专门的任务。因此,开发人员不是让一个Web服务从头到尾运行以处理一个请求,而是将应用程序拆分为用户身份验证、页面服务、API服务、数据库模型服务等服务。拆分一个独立的应用程序(来源:Dzone)每个微服务由一个或多个微服务组成。对于在Django上运行的站点,我们可以通过增加在Django服务器上运行的副本数量来进行横向扩展。这些副本完全相同。如果我们运行一个数据库,我们可以通过增加副本的数量来增加副本的数量,我们通常称之为分片。将分片视为数据库的一部分,您可以独立运行并保留为整体数据的一部分。通过增加分片的数量,我们可以水平扩展数据库。这些副本可以在不同的机器上运行。所以如果我们想在100台机器上运行一个大型的web服务,我们可以在每台机器上单独运行100个副本。让我们看一个完整的例子。负载均衡器可以获取谷歌搜索查询并将其转发到api服务器的数千个副本之一。然后api服务器将请求同时转发给索引器、广告生成器和ML神经网络。每个服务可以运行数千个副本。这些单独的服务执行它们自己的任务,每个任务都是整个原始请求的一部分,并且api服务器聚合结果并将它们作为搜索结果返回给您。聚合式微服务架构(来源:ArunGupta)有关微服务架构模式的更多信息,请访问ArunGupta的博客。他是AWS的首席技术专家。优点以下是一些比较关键的优点。当然还有很多其他的优点,但这四个是最重要的。微服务框架最重要的不可否认的优势是能够扩展任何组件。如果服务(例如神经网络)负载很重,您可以简单地运行该服务的更多副本。服务是独立的。每个组件都可以存在于一个单独的库中,由专门的工程师团队维护。每个组件都可以用最适合它的语言编写,例如用C编写的数据库服务或用Python编写的Web服务。组件的更新和新组件的编写不会影响其他服务。架构是可插入的。基于服务独立性构建,却带来了一个全新的境界。公司甚至不需要编写其所有服务。MySQL、Elasticsearch、Redis等第三方应用程序都是可以轻松集成到您的系统中的微服务。容错(通过故障隔离)。只有当您的系统设计不合理时,才能实现这种优势。一个副本的故障不会导致整个管道故障甚至停止服务。同样,特定服务的错误不会影响其他不相关服务的正常运行。这并不总是那么容易,容错是工业和研究中的一个难题,尤其是对于分布式数据库和网络。当然,与所有事物一样,微服务也有一些缺点。将请求从一台服务器转发到另一台服务器有一些开销和复杂性。分布式系统通常存在依赖性、复制和共享问题。随着微服务数量和复杂度的增加,部署和调试的难度也呈指数级增长。好消息是,有大量的研究人员、公司和初创公司齐心协力解决这些问题。Jenkins、Spinnaker和Jaegertracing等项目是当今最流行的开源解决方案之一,工业界和学术界每天都有新的创新。所以分布式系统还是可以说是比较新的,其影响力每天都在急剧增长。我的意思是,想想你是怎么读到这篇文章的。