微服务架构入门(Micro-Architecture)

本文对微服务架构的概念做了基本的介绍,对没有微服务体系结构经验和相关概念的开发人员来说是很好的入门文章。

微服务架构(MSA)正在成为代替SOA的一种方案。与SOA改进企业软件架构的方式一样,围绕iT的新模式和体系结构,微服务体系结构(Microservices architecture, MSA)构建企业软件的过程中,也出现了一些新的架构风格和新概念。

比如:

Service Mesh服务网格-在微服务之间进行通信的一种技术。

Serverless在云中运行您的代码作为函数。

Micro-Integration微集成——将集成作为微服务运行。

Micro-Gateway微网关——以一种与微服务兼容的方式运行您的API网关。

所有这些架构都可以被归类到“微服务”的概念下,并被称为“微架构”。在这篇文章中,我将介绍微型架构以及如何在这样的体系结构中使用微API网关。

Figure 1: 微服务架构

如上图所示,微型架构与任何类型的基础设施、供应商或技术无关。它是一个开放的体系结构,可以使用最适合的技术或特定企业的供应商来实现。让我们更深入地了解微观架构。

我们有三组不同颜色的微服务。从MS开始的微服务是真正的后端业务逻辑实现。MS-X和MS-Y描述了两组微服务(例如银行系统中的贷款和存款微服务组)。每个hexagon描述一个负载均衡,高度可用的微服务(例如Kubernetes服务)。标记为MI的六边形是集成微服务,它集成了现有的微服务(MS类型),并提供了复杂的高级功能。

连接微服务的箭头描述了服务网格的功能,在内部,它使用sidecar代理(或不使用,具体情况取决于你所选的技术栈)。该组件提供了在传输层(L3/L4)上的超时、重试、断路器、服务发现和负载平衡等功能。然后,通过服务网格的控制来完成服务网格的配置。

我们还有三个菱形,它们演示了API微网关功能,这些网关提供了如安全、缓存、节流、速率限制和分析等功能,以供上层的微服务层使用。在这张图中,我们为三组微服务使用了三种不同的微网关。以方便我们扩展,每个MS或MI都可以有自己的微网关。

微API网关是这个体系结构中的一个特殊组件,因为它具有一些其他组件中已经具备的横切 (cross-cutting) 特性。如果我们使用服务网格的功能,它有一些功能,如负载平衡、服务发现和断路器,这些功能已经在微网关中可用。重要的是要了解这些功能可用于内部的、内部的微服务通信,而微网关则使用这些功能来对外公开服务。这意味着我们不能忽略服务网格体系结构中API网关的必要性。

另外一个横切组件是微集成层(cross-cutting)组件是微集成层( micro-integration layer),这里可能与服务微API网关有些重复,提供,如服务编排、转换和组合等功能。我们还需要清楚地认识到,微集成层为内部服务和开发人员级别提供了这些功能。但是,微网关上可用的功能类型更多地指向外部用户交互层,有时用户可以直接使用这些特性,比如API组合来构建自己的API。

另一方面,不推荐使用微API网关作为服务网格或微集成层的替代,尽管在某些情况下它可以达到目的。当您的系统在将来增长时,这种方法将引入更多的复杂性。

对开发人员来说,在这个微架构中的另一个好处是无服务器Serviceless(or Function as a Service - FaaS)能力。任何技术供应商都可以将基础架构层与位于其数据中心上的微网关和微集成功能结合起来,为客户提供无服务器服务,这样客户就可以用他们喜欢的编程语言编写他们的实现,并在他们的基础架构下将其作为微服务运行。在一个无服务器的世界中,ms类型的实现将由用户完成,所有其他组件将由云提供商部署、托管和维护。

最后,应用程序可以通过接触相关的微网关来使用相关的api。基于应用程序类型和API需求,同样的应用程序也可以使用所有的微网关。

作为本文的最后一部分,我将分享一些可以来实现这个微型架构的现有技术。

Microservices

Micro-Integrations

Service Mesh

Micro-Gateway

Java (SpringBoot, DropWizard)

Ballerina

LinkerD

WSO2 APIM

Javascript (NodeJs)

Java (Spring Boot)

Istio/envoy

Apigee

Go

Nginx

Kong

Infrastructure

Containerization

Orchestration

IaaS (GCP, AWS, Azure)

Docker

Kubernetes

VM (VMWare)

Rocket

Docker Swarm

Physical

Mesos DC/OS

原文发布于微信公众号 - 程序你好(codinghello)

原文发表时间:2018-05-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏喔家ArchiSelf

解读六边形架构

追溯微服务架构的渊源,一般会涉及到六边形架构。追溯六边形架构的起源,要看始作俑者Alistair Cockburn的这篇文章 http://alistair.c...

1403
来自专栏郭耀华‘s Blog

【绝对给力】Android开发免豆资料(教程+工具+源码)地址汇总

教程下载: 【免费】android界面效果全汇总.pdf http://down.51cto.com/data/209179 Android终极开发教程...

4229
来自专栏FreeBuf

关于Fuzz工具的那些事儿

前段时间一直在研究fuzz工具,这里就写篇文章总结一下下。 在安全测试中,模糊测试(fuzz testing)是一种介于完全的手工渗透测试与完全的自动化测试之间...

9435
来自专栏玉树芝兰

如何用Python做Web开发?——Django环境配置

用Python做Web开发,Django框架是个非常好的起点。如何从零开始,配置好Django开发环境呢?本文带你一步步无痛上手。

1262
来自专栏编程一生

实现一个自己的搜索引擎的初始规划

1674
来自专栏Android群英传

震惊!我逆向了Android代码居然看见……

1141
来自专栏移动端开发

iOS 即时通讯 + 仿微信聊天框架 + 源码

更新:2017年8月1日 实在是抱歉,git上的Demo这么久,有问题自己没有发现!肯定给大家造成过不方便,抱歉!git上Demo刚重新上传,要有需要的可以去...

9415
来自专栏python开发者

Ubuntu Desktop安装及桌面美化(修复图片)

Ubuntu Desktop安装及桌面美化 1   开篇概述 本 系统的文章主要是讲互联网方向的开发主题。根据目前主流互联网公司的技术架构,Linux是必不可少...

5095
来自专栏Golang语言社区

golang 的channels 行为

当我第一次使用 Go 的 channels 工作的时候,我犯了一个错误,把 channels 考虑为一个数据结构。我把 channels 看作为 gorouti...

1605
来自专栏Brian

Effective Debugging-高效调试

概述 最近在看《Effective Debugging》,作者(Diomidis Spinellis)将30多年的系统开发和调试的经验融入到书中,从策略、方法以...

3598

扫码关注云+社区

领取腾讯云代金券