当我们谈论微服务架构时, 我们已经意识到 您团队的组织和沟通结构会极大地影响您技术系统的设计。 当我们真正开始实现这些体系结构时,我们发现我们已经深入到分布式系统中。 我们还发现,昨天和前一天的许多技术和许多方法对于我们所处的这种发展做出了巨大贡献。 在许多方面,我们可能正处于Lambda / Function作为服务风格应用程序的新进化周期的开始,但是我不想在这里分散太多注意力。
我最近观察到的是,几年前,我们正在寻找新的方法来迭代和改进所谓的微服务。 也许我应该改一下。 我们所做的并不是什么新鲜事。 也许我们只是为某些老问题找到了更优雅的解决方案?
在构建微服务时,我们实际上只是更深入地研究了分布式系统-这个主题已经在技术上进行了40多年的研究,并且根深蒂固于复杂的自适应系统理论中,而该理论已经存在了更长的时间。 但是从技术的角度来看,我们需要解决的一些事情是我们听到的很多事情:
- 部署
- 交货
- 蜜蜂
- 版本控制
- 合约
- 缩放/自动缩放
- 服务发现
- 负载均衡
- 路由/自适应路由
- 健康检查
- 组态
- 断路
- 舱壁
- TTL /截止
- 延迟追踪
- 服务因果追踪
- 分布式日志
- 指标曝光,收集
我可能已经错过了一些–如果您认为我已经错过了一些令人眼花something乱的内容,可以随时与(@christianposta)联络。
Netflix和其他互联网公司一直在惊人地透露他们为解决其中一些问题所做的一些事情(例如,将软件开源或撰写论文)。 他们实施了什么(选择一个公司,故事是一样的),他们必须从头开始实施,因为那里没有类似的东西。 但是私下里,每个人都会告诉你,他们会喜欢重做另一张照片,因为他们会改变一些东西。
我真正感到兴奋的是,在某些情况下,我们开始看到这一点。 我们开始看到下一波有助于解决其中一些问题的技术,但是方式更为优雅。
例如,Kubernetes是Google和Red Hat(各自)第三次构建一个平台,该平台具有一组应用程序级原语,用于运行已构建在容器上的云原生应用程序。 曾经有过迭代(无论是在Google还是在开源),但是Kubernetes大大简化了服务发现,扩展,部署等工作。构建简单的事情并不容易。 似乎社区中的其他人也同意,因为Kubernetes是github上最热门的项目,目前有1000多个提交者。 太疯狂了! 如果Kubernetes大约是5年前,您将看不到解决服务发现,部署,故障转移,负载平衡等这些“微服务”框架。
另一个例子是断路。 任何人都可以编写断路器(很多人可以编写)。 Netflix甚至以OSS形式发布了他们的断路器([Hystrix库] [https://www.google.com/search?client=safari&rls=zh-CN&q=hystrix&ie=UTF-8&oe=UTF-8])。 应用程序使用hystrix断路器库来实现该功能,当它进行传出网络调用时,它想保护自己免受下游异常的影响,并试图控制爆炸的爆炸半径。 这样做的缺点(用于断路,服务发现,跟踪,度量标准以及列表不胜枚举)是开发人员必须引入正确的库并实际上将所有这些事情正确处理的责任。 真的很难
我真的很喜欢以另一种方式解决此问题。 我们真正想要的是不要使我们的应用程序变得更加复杂,而没有更多的库/框架,并希望每个开发人员都可以使用它们/在项目之间甚至更重要的是在编程语言之间正确地应用它们。 试图在跨项目的开发人员之间维护同一事物的许多不同实现只是疯狂。
恕我直言,“更优雅”的做法是将这些内容放入客户端代理中,并与您的应用程序作为“辅助工具”进行部署。 Lyft的Envoy项目是一个很棒的小项目。 Envoy是一个很小的C ++客户端代理,它处理诸如断路/批量管理/服务发现/度量收集/跟踪等操作。这意味着单个Envoy代理与每个应用程序(1-1)一起部署。 无论使用哪种编程语言,这都使应用程序可以利用此功能。 该应用程序基本上是通过“本地主机”与其他服务进行对话的,而Envoy会完成对实际服务的所有代理。 它知道如何找到后端服务,进行自适应路由,重试,跟踪,限制等。作为开发人员,我可以保持应用程序代码的清洁,并免费获得所有这些便利。
最后,使用REST构建微服务绝对是事实。 建立服务,公开REST端点,并将其用于服务之间的所有交互/集成。 我看到的两件事本身并不是“新的”,但正在演变成更优雅的事物。 大规模使用REST的一些问题包括跟踪服务之间的中断更改,了解服务之间的类型安全性以及与其他二进制RPC样式服务(至少与HTTP 1.x一起)映射时存在相当大的开销。 我很兴奋的是诸如无阻塞通信框架(即RxJava,[Vert.x] [http://vertx.io]),异步通信模式(我是一个发消息的家伙!)之类的东西。 ,甚至RPC([yay gRPC!] [http://www.grpc.io])之类的东西也变得越来越优雅。
我想我很兴奋的是,在开源社区(仅结帐Kubernetes社区!)中正在融合的新工具通过将更多复杂的东西往下推(并实现)进一步改善了构建应用程序的体验。它采用了同类最佳技术)。
翻译自: https://www.javacodegeeks.com/2017/02/excited-2-0-tech-stack-microservices.html