微服务是如何拯救我的

原文:How Microservices Saved My Small SaaS Business

作者:Ynon Perek

翻译:Vincent

译者注:作者通过阅读文章了解了微服务,但也知道了微服务带来的复杂性,所以对微服务是持反对态度的,但是等到真正使用了以后,才了解微服务带来的好处,那你是不是对微服务也有不好的认识呢?有的话,看看作者是如何改变自身的态度。以下为译文。

最近我阅读了很多关于微服务的文章,知道想要实现微服务是如何的困难,因此很长一段时间,我对微服务是持反对态度的。直到认识到微服务给负责维护单体架构的开发人员提供了一些其他架构所不能提供的东西以后,我的立场才发生了转变。

维护单体架构有哪些问题

我的框架选择是服务端使用Rails和React,客户端用的是Redux。如果需要尽可能快的实现新功能,而且尽可能容易的编写和运行测试案例(Rails现在也集成了Capybara),这个框架无疑是个很好的选择,因为它使得代码更稳定,客户因此也很高兴。

但是,当我试图扩大规模,添加更多的开发人员来帮助维护和改进代码时,问题就出现了。

事实证明,对于大多数的开发人员来说,要想读懂别人的代码是一件很困难的事,如果框架的使用度很低(这里介绍的Rails框架市场份额就很少),那么想要读懂就更加困难了。框架使用度低其实根本不算问题,真正的问题是工资。由于大公司和一些看起来很酷的创业公司也似乎都在招人,我没办法与他们竞争人才,因此无法招聘到优秀的员工,所以才会遇到各种问题。

由于预算的限制,我不可能招募到顶尖的人才,也没办法让他们在开始操作生产环境之前提供2-3个月的时间来学习代码。

所以我尝试用自由职业人员去解决问题

这种尝试的结果最终以失败告终,而且失败得很惨。因为对于员工来说,学习代码就已经是一件很困难的事情了,对于自由职业者来说,这种难度最起码增加了十倍。由于他们手上有很多其它的项目,而且他们也知道只有当工作完成以后才会得到报酬,所以当他们意识到你的工作比下一个人的工作要困难得多的时候,他们压根就不会理你。

而当你花了几个小时跟自由职业者解释清楚了代码是如何运行的,需要做哪些调整之后,代码都放在了他们的电脑上,当你想要了解进度时,自由职业者的回应速度可能会很慢。

随着时间的推移,为了尽量减少这些风险,我尝试着让一名自由职业者在办公室里工作,或者只给他们部分代码。最终我还是放弃了,因为成本上升了,但是结果却依然很糟糕。

微服务出现了

后来直到有一天,一位朋友想帮我实现一个功能,但他想用PHP去实现。我决定给他一个机会,然后设置了nginx,这样“他的”页面就可以用PHP服务了。我还构建了一个专用的Rails控制器,这样就相当于给他提供了一个单独的DB schema和一个简单的API。

新的nginx看起来是这样的:

现在只要想访问/php文件夹下面的php文件的用户最终都会得到PHP服务了。由于PHP服务和单体架构都在同一个域上运行,所以浏览器会发送相同的session和cookie。

这样身份验证方案就变得非常的简单了:PHP发送给cookie专用的Rails控制器,如果action验证通过的话,Rails会将结果返回回来。下面是Rails代码的简化版本:

find_resource方法的实现是一段很长的case块,在这里详细介绍的话会显得很无趣。

一年以后

在做了第一次尝试的一年之后,终于与自由职业者成功的合作开发出来一个系统,而且现在双方的风险也尽可能的降低了。

我可以使用一个定义很好的API为任务编写详细的规范。通常我会让自由职业者用他们喜欢的语言实现JavaScript API和后端。

服务和单体架构的整合仍然是一个难题,但并没有那么糟糕。只要有可能,我们将使用客户端代码来管理事务逻辑。对于异步任务,我们将使用RabbitMQ,对于像真正需要事务的这样极少数情况,我们会构建一个专用的后端API。

现在这个方法面临的主要问题是运维。随着时间的推移,自由职业者逐渐完成了他们的工作,而我就负责对他们的代码就行运维(这并不是一件容易的事)。然而,通过要求他们做一个完整的测试套件,这样风险也可以降低。

微服务尽管有这样或那样的复杂性和困难,但是它却是我和其他人一起工作的最简单的方法,它不会增加额外的雇佣成本,自由职业者也不会冒着风险。我强烈建议尝试一下这种架构,特别是对于单独的开发人员。

### 回答1: 微服务和分布式是两个相关但不同的概念。 微服务是一种架构风格,将一个应用程序拆分成一组小型的、独立的服务单元,并通过API进行通信。每个服务单元都可以独立开发、部署和扩展,这提高了系统的可靠性和可维护性。 分布式是指一个应用程序在多台计算机上运行,并通过网络进行通信。分布式系统通常由多个服务组成,这些服务可以在不同的计算机上运行。 因此,微服务可以是分布式架构的一部分,但不是必须的。一个应用程序可以是分布式的,但并不是微服务架构。 ### 回答2: 微服务是一种软件架构的设计理念和模式,将一个大型的应用程序拆分成多个小型的服务,每个服务都独立部署、独立运行,且具有独立的数据存储和交互接口。这些服务之间通过轻量级的通信机制进行交互,可以使用HTTP、消息队列等方式进行通信。每个微服务都专注于实现一个特定的业务功能,因此可以独立开发、测试和部署,提高了系统的可维护性、可扩展性和灵活性。 分布式是指在多台计算机上分布运行多个程序,通过网络连接进行通信和协作,共同完成一个任务或提供一个服务。分布式系统的特点是在不同的计算机节点上部署不同的程序和服务,这些节点通过网络进行通信,共享和传输数据。分布式系统可以提供高可用性、高性能和可扩展性等优势,同时也面临着节点故障、通信延迟、一致性问题等挑战。 微服务和分布式是两个不同的概念,微服务是一种架构设计的思想,而分布式是一种计算机系统的运行方式。微服务可以在分布式系统中应用,将一个大型的分布式系统拆分成多个小型的微服务,每个微服务可以运行在不同的节点上,通过网络进行通信和协作,最终完成整个系统的功能。因此,微服务可以看作是一种分布式系统的架构方式,而分布式不一定是微服务架构。 ### 回答3: 微服务是一种软件架构风格,它将一个大型应用程序拆分为一组更小、更独立的服务单元,每个服务单元都可以独立开发、部署、扩展和管理。这些服务单元之间通过轻量级的通信机制进行交互,如HTTP或消息队列。 微服务架构具有以下特点: 1. 每个微服务独立部署,可以使用不同的技术栈和语言编写。 2. 每个微服务都有自己的数据存储,可以使用不同类型的数据库或存储。 3. 微服务之间通信通过API进行,可以使用各种通信机制。 4. 可以根据需要对每个微服务进行独立的扩展,提高系统整体的弹性和性能。 5. 每个微服务都可以独立进行升级和维护,不会影响其他微服务的运行。 分布式是一种计算机系统的架构,其中多个独立的节点通过网络进行通信和协调,共同完成一个任务或提供一个服务。在分布式系统中,各个节点之间相互协作,共享资源,通过消息传递或远程调用等方式进行通信。分布式系统通过将工作负载分散到多个计算机节点上,提高了系统的可靠性、可扩展性和性能。 分布式系统具有以下特点: 1. 系统中的节点可以位于不同的物理位置,通过网络进行通信。 2. 节点之间共享资源,例如数据库、文件系统或计算资源等。 3. 分布式系统中的节点可以独立工作,并通过协调和通信实现任务的分工和协作。 4. 分布式系统需要考虑节点故障、网络延迟和并发控制等问题。 5. 分布式系统可以提高系统的可靠性和性能,并具有高可用性和可扩展性。 总结来说,微服务是一种软件架构风格,将大型应用程序拆分成小的服务单元,而分布式是一种计算机系统架构,多个独立节点通过网络通信和协调来完成任务或提供服务。微服务是一种分布式系统的实践方式之一。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值