Mecha:将 Mesh 进行到底

什么是Service Mesh?什么是 Multi Runtime? Istio 与 Dapr? 本文介绍了 Service Mesh 和 Multi Runtime 架构感兴趣的朋友未来可以关注下多运行时的发展。如果 Service Mesh 解决的是服务间的通信问题,那多运行时,就是 Service Mesh 的延展和升华,对分布式应用运行时所需的能力进行了抽象,对外暴露统一的分布式原语 API,并且不局限于 Sidecar 模式,甚至支持 node 模式,以适应更多应用场景,为多云、混合云部署提供更好的可移植性,避免厂商锁定。 阅读详情

内容摘要:Service Mesh 落地实践三年,效果一直并不理想,到了该反思的时候了。Mecha 作为面向服务的分布式能力抽象层,是 Service Mesh 模式的自然进化版本,预计也将是云原生化和 Mesh 化的必然趋势,让我们将 Mesh 进行到底。

Mecha 介绍

什么是 Macha?

Mecha 一词,相信爱好动漫的同学应该都不陌生。是的,就是大家熟悉的那个 Mecha(机甲):

Mecha 这个词之所以出现在这里,主要是因为 Bilgin Ibryam 的这个博客文章 “Multi-Runtime Microservices Architecture”,提出了微服务架构的一个新的设想:Multiple Runtime。

备注:这篇博客文章强烈推荐阅读,我甚至建议在阅读本文之前先阅读这篇文章,因为我今天的内容,可以视为对这个文章的深度解读和思考。为了方便,这里提供一份中文翻译版本《多运行时微服务架构》(链接见文末)。

在这篇博客中,Bilgin Ibryam 首先分析并总结了分布式应用的四大需求:

  • 生命周期(Lifecycle)

  • 网络(Networking)

  • 状态(State)

  • 捆绑(Binding)

由于每种需求存在的问题和局限性,导致传统解决方案如企业服务总线(ESB)及其变体(例如面向消息的中间件,更轻量级的集成框架等)不再适用。随着微服务架构的发展,以及容器和 Kubernetes 的普及和广泛使用,云原生思想开始影响这些需求的实现方式。未来的架构趋势是通过将所有传统的中间件功能移至其他运行时来全面发展,最后的目标是在服务中只需编写业务逻辑。

备注:详情请见原文,为了节约篇幅,这里只做简单概述,不完全引用原文内容。

下图是传统中间件平台和云原生平台的对比,传统中间件以各种SDK的方式提供能力,而云原生平台则通过各种外围Runtime(典型如大家熟悉的Servicemesh/Istio):

因此作者引入了 Multiple Runtime 的概念:

作者提出:很可能在将来,我们最终将使用多个运行时来实现分布式系统。多个运行时,不是因为有多个微服务,而是因为每个微服务都将由多个运行时组成,最有可能是两个运行时-自定义业务逻辑运行时和分布式原语运行时。

对多运行时微服务架构和 Mecha 的说明:

您还记得电影《阿凡达》和科学家们制作的用于去野外探索潘多拉的 Amplified Mobility Platform (AMP)“机车服”吗?这个多运行时架构类似于这些 Mecha-套装,为人形驾驶员赋予超能力。在电影中,您要穿上套装才能获得力量并获得破坏性武器。

在这个软件架构中,您将拥有构成应用核心的业务逻辑(称为微逻辑/micrologic)和提供强大的开箱即用的分布式原语的 Sidecar Mecha 组件。Micrologic 与 Mecha 功能相结合,形成多运行时微服务,该服务将进程外功能用于其分布式系统需求。最棒的是,Avatar 2 即将面世,以帮助推广这种架构。我们最终可以在所有软件会议上用令人赞叹的机甲图片代替老式的边车摩托车;-)。接下来,让我们看看该软件架构的详细信息。

这是一个类似于客户端-服务器体系结构的双组件模型,其中每个组件都是独立的运行时。它与纯客户端-服务器架构的不同之处在于,这两个组件都位于同一主机上,彼此之间有可靠的网络连接。这两个组件的重要性相当,它们可以在任一方向上发起操作并充当客户端或服务器。其中的一个组件称为 Micrologic,拥有非常少的业务逻辑,把几乎所有分布式系统问题都剥离出去了。另一个伴随的组件是 Mecha,提供了我们在本文中一直讨论的所有分布式系统功能(生命周期除外,它是平台功能)。

作者在这里正式提出了 Mecha 的理念:

思路大体是:Smart Runtime, Dumb Pipes。

我对 Mecha 的理解是:业务逻辑在编码开始阶段应该是“裸奔”的,专注于业务逻辑的实现,而尽量不涉及到底层实现逻辑;而在运行时,则应该装备“机甲”,全副武装,大杀四方。熟悉的味道是吧?标准而地道的云原生思想。

Mecha 的本质

作者在原文中探讨了 Mecha 运行时的特性:

  • Mecha 是通用的,高度可配置的,可重用的组件,提供分布式原语作为现成的能力;

  • Mecha 可以与单个 Micrologic 组件一起部署(Sidecar 模式),也可以部署为多个共享(注:我称之为 Node 模式);

  • Mecha 不对 Micrologic 运行时做任何假设,它与使用开放协议和格式(例如 HTTP/gRPC、JSON、Protobuf、CloudEvents)的多语言微服务甚至单体一起使用;

  • Mecha 以简单的文本格式(例如 YAML、JSON)声明式地配置,指示要启用的功能以及如何将其绑定到Micrologic 端点;

  • 与其依靠多个代理来实现不同的目的(例如网络代理、缓存代理、绑定代理),不如使用一个 Mecha 提供所有这些能力;

下面是我对上述特性的个人理解:

  • Mecha 提供的是能力,以分布式原语体现的各种能力,而不局限于单纯的网络代理;

  • Mecha 的部署模型,不局限于 Sidecar 模式,Node 模式在某些场景下(如 Edge/IoT,Serverless FaaS)可能会是更好的方式。至少,Mecha下有机会按需选择,而不是绑死在 Sidecar 模式上;

  • Mecha 和 Micrologic 之间的交互是开放而有 API 标准的,Mecha 和 Micrologic 之间的“协议”体现在 API 上,而不是 TCP 通讯协议。这提供了一个契机:一个统一 Micrologic 和 Mecha 之间通讯方式的契机;

  • Mecha 可以以声明式的方式进行配置和控制,这非常符合云原生的理念,同样也使得 API 更关注于能力本身,而不是能力如何配置;

  • 应用需要的能力如此之多(参见上面的图:分布式应用的四大需求),如果每个能力都对应一个代理(不管是 Node 还是 Sidecar),数量会非常夸张,带来的运维压力会很可怕。因此,如 Mecha 这个名字暗示的,运行时应该是整套的形式提供能力,而不是分散;

如果用一句话来总结,那么我认为 Mecha 的本质应该是:

“面向应用的分布式能力抽象层”

如 Service Mesh 的本质是服务间通讯的抽象层一样,Mecha 的本质是应用需要的各种分布式能力和原语,包括但不限于服务间通讯。

从这个角度上说,Mecha 覆盖的范围是 Service Mesh 的超集:毕竟 Service Mesh 只覆盖到应用的部分需求(服务间通讯,还只限于同步/一对一/request-response 模式),还有更多的分布式能力和原语有待覆盖。

换一句话说,Mecha 的目标应该是:“将 Mesh 进行到底!”

Mecha 的优势和未来

作者指出:Mecha 的好处是业务逻辑和越来越多的分布式系统问题之间的松耦合。

下图是业务逻辑和分布式系统问题在不同架构中的耦合:

其实思路和 Service Mesh 是一脉相承的,只是覆盖的分布式能力更广泛一些。

有一个问题:Mecha 会不会成为微服务架构的演进的下一个形态?我个人的答案:是,随着云原生的推进,分布式能力(以传统中间件为典型代表)下沉是大势所趋,Mesh 化的范围必然会继续扩大,也就离 Mecha 的形态越来越近了。这也就是本文标题的立意所在,Mecha 会是微服务乃至云原生的下一站。

微软 Dapr

在介绍完 Mecha/Multiple Runtime 的理念之后,我们来看看目前微软新推出来的 Dapr 项目 —— 这应该是业界第一个 Multiple Runtime 的开源实践项目。

项目地址:https://github.com/dapr/dapr

Dapr 介绍

Dapr 是 Distributed Application Runtime (分布式应用运行时)的缩写,官方介绍说 Dapr 是“一种可移植的,事件驱动的运行时,用于构建跨云和边缘的分布式应用”。

Dapr 的详细介绍是:

Dapr 是一种可移植的、Serverless 的、事件驱动的运行时,它使开发人员可以轻松构建弹性,无状态和有状态微服务,这些服务运行在云和边缘上,并包含多种语言和开发框架。Dapr 整理了构建微服务应用为开放,独立的构建块的最佳实践,使您能够使用自己选择的语言和框架来构建可移植的应用程序。每个构建块都是独立的,您可以在应用中使用其中的一个或多个。

Dapr 的功能和定位,下面这一张图就可以概括了:

  • 最底下基础设施是各种云平台(主流公有云都支持)或者边缘环境;

  • 其上是 Dapr 提供的分布式能力,Dapr 称之为“building block”;

  • 这些 building block 的能力,以统一的 API(支持 HTTP 和 gRPC)对外提供服务;

  • 应用可以用各种语言编写,然后通过 Dapr 提供的 API 使用这些能力,Dapr 也提供客户端类库来简化对 API 的调用,实现了多语言的支持;

Dapr 提供的具体分布式能力(building block)如下图所示:

每个 building block 提供的具体能力请参加 Dapr 的官方文档:

https://github.com/dapr/docs/tree/master/concepts

Dapr 的 API 例子

我们来看一下应用调用 Darp API 的例子,体验一下使用 Dapr 的方式。

以 Service Invocation / 服务调用为例:

部署和调用方式与 Service Mesh/ Istio 极为相似,但是,差别在于:Dapr 是以提供 API 的方式提供 API 背后的能力,而不是提供提供协议代理的方式。

上图,1 是 ServiceA 发起请求来调用一个远程服务。其 HTTP request 如下所示:

POST/GET/PUT/DELETE http://localhost:<daprPort>/v1.0/invoke/<appId>/method/<method-name>

其中:

  • 参数 daprPort 是 Dapr Runtime 启动的监听端口,用来接受应用的 outbound 请求;

  • 参数 appId 是远程应用在 Darp 中的关联 ID,每个注册到 Dapr 的应用都有一个唯一的 appId;

  • 参数 method-name 是要调用的远程应用的方法名或者 URL;

负载可以存放在 HTTP body 中随请求发送,如 json。

注意,虽然都是提供相同的功能,这里体现了 Dapr(或者说背后的 Mecha)和 Service Mesh 在方式上的差异:暴露 API 还是代理通讯协议。

我们看一个更明显的例子,Dapr 提供的 “publish/subscriptions” 能力,让应用可以方便的发布消息,或者订阅主题并接收消息。下图是应用发布消息,请求直接发给 Dapr 即可:

例子中,参数 topic 指定了消息要发往的主题(例子中是  deathStarStatus)。后续 Dapr 会完成将消息入 queue,然后推送到订阅了该 topic 的应用。接收消息的方式也类似,不过这次是 Darp 主动发起:

  • Dapr 首先会请求应用,咨询应用需要订阅那些主题(topic),如例子中应用返回的的 TopicA / TopicB;

  • Dapr 实现主题订阅,在接收到消息之后,再把消息发送给应用,通过 URL 参数的不同来区分不同的主题;

注意在这个调用期间,无论是收发消息,应用完全不用理会底层 pub/sub 的实现机制(比如是 Kafka,还是RocketMQ,还是其他公有云提供的消息机制),也完全不用引入该实现机制的客户端 SDK,只是简单的使用 Darp定义的 API 即可,从而实现了和底层的解耦,以及“厂商不绑定”。

为了进一步简化调用的过程(毕竟发一个最简单的 HTTP GET 请求也要应用实现 HTTP 协议的调用/连接池管理等),Dapr 提供了各个语言的 SDK,如 Java / Go / Python / dotNET / JavaScript / cpp / Rust 。另外同时提供 HTTP 客户端和 gRPC 客户端。

我们以 Java 为例,Java 的 client API 接口定义如下:

public interface DaprClient {     Mono<Void> publishEvent(String topic, Object event);   Mono<Void> invokeService(Verb verb, String appId, String method, Object request);    ......}

具体可见:

https://github.com/dapr/java-sdk/blob/master/sdk/src/main/java/io/dapr/client/DaprClient.java

分析和总结

前面介绍了 Multiple Runtime / Mecha 的架构思想,以及参考实现之一的微软 Dapr 项目。

由于 Multiple Runtime / Mecha 这个思想非常的新,刚刚提出不久,而微软 Dapr 项目也是一个新出来的项目,不管是理论思想还是实践都处于非常早期的状态,也还没有形成完善的方法论。

特别申明:以下内容更多是我个人当下的理解和感悟,仅代表个人意见,肯定有很多不成熟甚至谬误的地方,欢迎指正和探讨。

Mecha 和 Dapr 的启示

  • Mesh 模式应该推向更大的领域。

随着云原生的深入,应用需要的分布式能力应该全面下沉,而不仅仅局限于Servicemesh提供的服务间通讯能力;应用形态会朝纯业务逻辑这个目标更进一步,应用更加的云原生化。

这是大势所趋,也是Mecha架构出现和发展的原动力。

  • Mecha 强调是“提供能力”,而不是通讯代理。

Mecha 的使用方式和 Service Mesh 有非常大的差异:Mecha 强调的是提供分布式能力给应用使用,这些能力最终以封装完善的 API 的方式呈现。API 体现的是应用对能力的“需求”和“意愿”,不涉及到如何实现,实现是 Mecha 的职责,采用什么样的实现也是由 Mecha 来控制。

在Service Mesh 下,不存在这个需求:Service Mesh 提供的是服务间通讯能力,这个能力是由 Sidecar 来提供,没有其他更底层的实现,不存在隔离和替换的可能。受服务通讯协议和报文 schema 的限制,Service Mesh 只能做请求的“转发”,能力聚焦在“如何转发”上,没有其他需要隔离和替代的能力。

当 Mecha 把能力扩展到 Servic Mesh 之外时,很多能力是由外部系统提供:比如 pub-sub 能力可以由不同的 Message Queue 实现;状态管理能力可以连接不同的 Key-Value 实现。此时能力的隔离性和可替代性就成为关键需求:解耦应用和能力实现,容许 Mecha 替换底层实现(进而实现供应商不锁定等)。

  • 不强求“零侵入” 。

在 Service Mesh 中,“零侵入”是一个非常强调的特性,为此不惜引入 iptables 等流量劫持方案。“零侵入”在某些特殊场景下会发挥巨大的优势,如旧有应用不做改造的前提下接入 Service Mesh。好处自然不言而喻,但零侵入也有自身的限制:客户端必须能发出符合服务器端要求的网络通讯请求,这个过程外部无法插手。

对于服务间通讯,这个不是大问题。但是对于其他能力,由于有和实现解耦的需求,再通过客户端自行发起原生协议的请求就不合适了。因此,Mecha 中更倾向于采用低侵入的轻量级 SDK 方案,同样也可以实现跨语言和跨平台,只是需要付出实现各种语言 SDK 的代价。由于这个 SDK 足够轻量,因此代价还不算很高。

而这些少量的工作量、少量的侵入,可以换取轻量级 SDK 能提供的各种便利和配合(简单理解:开后门),可以实现能力的抽象和 API 的封装。权衡利弊,Mecha 下更倾向于轻量级 SDK 方案。

  • 不限定 Sidecar 部署 。

Sidecar 部署模式,存在资源占用、维护成本增加等缺点,在某些情况下可能并不合适:

  • 边缘网络、IoT 场景:资源非常有限,不适合启动太多 Sidecar;

  • FaaS 场景:应用自身足够轻量,甚至比 Sidecar 还要轻量;

  • Serverless 场景:Scale to Zero 时,对冷启动速度有严格要求,Sidecar 的启动和初始化可能拖累应用启动速度;

Mecha 下,部署模式不限定于  Sidecar ,在合适时容许选择 Node 模式,甚至 Node 模式和 Sidecar 模式混合使用。

  • API 和配置是关键。

API 是分布式能力的抽象,需要要对(开发上层业务应用的)客户友好,简单好用,稳定不变。这些 API 也需要标准化,被社区广泛接受和采纳,才能实现厂商不锁定和自由迁移,提升客户价值。

另外,API 还需要配合配置使用,在把能力抽象为 API 时,是不提供能力的细节控制的。这些控制将在运行时由 Mecha 根据配置实现,可以理解为:“API + 配置 = 完整的能力”。

API 和配置的制订以及标准化,预计将会是 Mecha 成败的关键。

Mecha 的精髓

Program to an interface, not an implementation.

Design Patterns: Elements of Reusable Object-Oriented Software (GOF, 1994)

Mecha 的精髓,要从上面这句名言开始:

  • 在 Mecha 下,为了实现解耦和可替换, Runtime 隔离了底层实现,因此演变为:"Program to an Runtime, not an implementation.";

  • 考虑到 Runtime 不管是部署为 Sidecar 模式,还是部署为 Node 模式,都是 Localhost,因此有:“Program to an Localhost, not an implementation.”;

  • 为了简化开发,Mecha 还是会提供轻量级 SDK,提供 API 作为能力的抽象:“Program to an API, not an implementation.”;

  • 考虑到 API 通常是以 interface 的形式提供,因此绕了一圈,Mecha 最后还是回到原点:“Program to an interface, not an implementation.”;

个人理解,Mecha 的精髓就在于这几个关键点:隔离/抽象/解耦/可替换。如下图所示:

  • 在 Mecha下,MicroLogic(也就是业务逻辑的代码实现)不容许直接使用底层实现提供的分布式能力;

  • Mecha Runtime 将为 Micro Logic 提供分布式能力,同时隔离应用和底层实现;

  • 为了方便使用,提供轻量级 SDK,其中的 API 层实现了分布式能力的抽象,应用只需面向 API 编程;

  • 轻量级 SDK 和 Mecah Runtime 配合,完成对底层实现的解耦和可替换;

Mecha 的实现原则

在 Mecha 的实现上,我理解的原则是这样:

  • Runtime 是主力,要做厚;

  • 轻量级 SDK 主要是给 Runtime 打配合,要做薄;

具体的职责划分:

  • 轻量级 SDK:实现多语言接入,低侵入(但不追求零侵入);

  • API 接口:由轻量级 SDK 中提供统一,目标社区化+标准化,给开发者提供一致的编程体验,同时提供可移植性;

  • 应用:轻量级 SDK/Runtime 配合,提供各种分布式能力,应用无感,只需简单使用 API,不耦合底层实现;

在 Mecha 架构中,Runtime 自然是整个架构的核心,扮演类似 Service Mesh 中数据平面的角色:

  • 所有分布式能力使用的过程(包括访问内部生态体系和访问外部系统)都被 Runtime 接管和屏蔽实现;

  • 通过 CRD/控制平面实现声明式配置和管理(类似 Service Mesh);

  • 部署方式上 Runtime 可以部署为 Sidecar 模式,或者 Node 模式,取决于具体需求,不强制;

备注:Mecha 有非常多的能力,实现上也有非常多的细节,这里先做一个 High Level 的概述。细节后面会有一系列文章一一覆盖,欢迎多交流讨论。

Mecha 总结

大概是在3月初,当时我第一次阅读 “Multi-Runtime Microservices Architecture” 这篇文章,有一种豁然开朗的感觉,尤其是有很多之前在反复考虑和权衡但是下不了结论的问题,在这个文章中得到了清晰的解答。可谓受益匪浅。

在 Service Mesh 探索和实践的这三年中,遇到很多问题,有很多之前没有想到过的问题浮现。比如,以前一直觉得 Service Mesh 中引入 Sidecar 带来的最大麻烦会是性能,但实际上,从目前的实践看,Sidecar 引入后带来的维护代价才是更令人头疼的事情,相比之下 Sidecar 引入带来的性能损失显得无伤大雅。

总结一下我个人对 Mecha 架构的核心理解,主要是两点:

  • Mecha 是云原生化和 Mesh 化的必然趋势:云原生在继续发展,应用需要的分布式能力需要继续下沉,越来越多的能力会以 Sidecar 的形式出现,这是大势所趋。但不可能出现一个应用部署十几个 Sidecar 的局面,这会是运维地狱。因此,必然需要出现新的形态来解决 Sidecar 过多的问题,合并为一个或者多个 Sidecar 就会成为必然。

  • Mecha 是 Service Mesh 模式的自然进化版本:Service Mesh 落地实践三年了,效果一直并不理想,到了该反思反省的时候了;而且 Mecha 的范围也远不止服务间通讯,新的需求下应该有新的思考和突破。Service Mesh 现有的固定模式,在 Mecha 下可以尝试打破以探索新的方式:不必拘泥于 Sidecar,试试 Node 模式;不必拘泥于通讯协议转发,试试 Runtime 提供能力解耦底层实现;不必拘泥于零侵入,试试在应用中保留一个足够轻的轻量级 SDK。

正如曾有说法,说“微服务是 SOA 实践中正确的部分(the Good Part)”,我希望在 Mecha 的探索和实践中,能够从 Service Mesh 的实践中吸取成功的经验和失败的教训,希望 Mecha 也能成为 Service Mesh 的 Good Part。希望在云原生的演进路线中,Mecha 可以继微服务和 Service Mesh之后,成为云原生落地实践的下一站。

回到现实,目前 Mecha 和 Multi-Runtime 还是一个非常新的想法,Dapr 项目也才刚刚起步,Mecha 要探索的道路还很漫长,一切都还需要摸索着前进。

附录:参考资料

在文章的最后,特别鸣谢 “Multi-Runtime Microservices Architecture”一文的作者 “Bilgin Ibryam”,我非常认可这篇文章中的思想和理念,分析归纳的非常到位,提炼和升华的能力令人佩服。

作者介绍:Red Hat 的首席架构师,Apache Software Foundation 的 committer 和成员。开源的布道师,博客作者,偶尔演讲,著有书籍 Kubernetes Patterns 和 Camel Design Patterns 。

本文参考了 Bilgin Ibryam 出品的如下内容:

  • 《Multi-Runtime Microservices Architecture》

https://www.infoq.com/articles/multi-runtime-microservice-architecture/

作者 Bilgin Ibryam,Mecha 的思想来自这篇文章,强烈推荐阅读,也可以直接看我翻译的版本《多运行时微服务架构》。如前所述,建议在阅读本文之前先阅读这篇博客文章。

  • 《The Evolution of Distributed Systems on Kubernetes 》

https://qconlondon.com/london2020/presentation/evolution-distributed-systems-kubernetes

作者 Bilgin Ibryam, 2020年3月在 QCon London 的演讲,依然强烈推荐。内容非常精彩,对 Kubernetes 上分布式系统演进做了很好的总结和展望,当然也依然在布道多运行时微服务架构的理念。本文的很多图片援引自这份 PPT。

相关阅读:

  • 《多运行时微服务架构》

https://skyao.io/post/202003-multi-runtime-microservice-architecture/

本文归档在 sofastack.tech。

???? 奖励支持 SOFAStack 的你~

* 点下右下角“在看”

* 到公众号对话框发送“T 恤”,试试手气~

* 本期互动奖品“SOFAStack 两周年纪念 T 恤”

MASA Framework - 整体设计思路 一个完整的设计要先从概念开始,为了降低学习成本我们直接复用Dapr的概念定义 阅读详情

相关推荐

什么是多运行时架构?

随着微服务架构在大规模组织中成熟落地,服务化体系规模的不断扩张也带来了一些典型问题:服务如何有效治理和接入?团队如何高效协作?本文介绍了多运行时架构解决上述问题的思路,并通过几种开源方案探讨了在实现中遇到的挑战,最后提出了对演进的设想及展望。本文介绍了多运行时架构的概念以及一些实现方案,并讨论了目前的实现中存在的限制与挑战,最后设想了一种未来可能的架构形态。

IDEAL Garden 1407

云原生: istio+dapr构建多运行时服务网格

1、生命周期:包括部署,健康检查,水平扩展,配置管理等,目前这些需求的最佳实践,都陆续在 kubernetes 上有了落地。2、网络:网络方面的需求 是 service Mesh 的主战场,比如 istio 可以满足这里绝大部分需求,除了 pub/sub。3、状态:包括数据的读写,状态其实是非常难以管理的,涉及幂等,缓存,数据流等等。4、绑定:主要是指和系统外部资源的交互。

a1058926697的博客 1204

微服务的终极目标,Mecha分布式运行时之Dapr

????欢迎点赞 :???? 收藏 ⭐留言 ???? 如有错误敬请指正,赐人玫瑰,手留余香! ????本文作者:由webmote 原创,首发于 【掘金】 ????作者格言: 生活在于折腾,当你不折腾生活时,生活就开始折腾你,让我们一起加油!???????????? 1. Mecha 是啥? 微服务发展到今天,已经有很多公司多年前已经改造完毕,也有些公司还在路上,微服务的优势,有过了解的朋友应该也都能说出个一二三来,经历过微服务改造的,应该都知道其中的艰辛。 单体服务有着很多优势,结构简单、事务的ACID

网尘的技术专栏 3046

为什么Dapr是比SpringCloud和Istio更优雅的微服务框架?

多技术栈多语言支持,多云/非云和传统虚拟机环境支持,2个特性让Dapr成为比SpringCloud和Istio都要有前途的微服务开发框架。

徐磊 - 新浪微博@北京的201个蓝天 998

解读软件架构的复杂性:业务和技术的双重挑战

本文探讨了软件架构中的复杂性及其对业务成功的影响。随着技术和业务环境的快速变化,架构师面临着管理日益增加的复杂性挑战。文章分析了影响架构复杂性的关键因素,如技术选择、团队协作和需求变更,并提出了一系列应对策略,包括明确的架构决策流程和持续的架构评估。通过强调沟通与合作,架构师可以更有效地应对复杂性,从而为企业创造持久的价值。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 6万+

IIS - 会话cookie中缺少HttpOnly属性

不啰嗦,我们直接开始! 先进行常规设置 打开配置编辑器 选中图中节点,将httpOnlyCookies设置为true 然后。。。不起作用。。。 换种方式 通过配置出站规则getcookie添加HttpOnly 在Web.config中添加如下出站规则 <rewrite> <outboundRules> <rule name="Add HttpOnly"> <match serverVa.

。 21万+

Multi-Runtime Microservices Architecture

Key Takeaways Creating distributed systems is not an easy task. Best practices have emerged around “microservice” architecture and “12-factor app” design. These provide guidelines related to the delivery lifecycle, networking, state management, and bindin

kevin_darkelf的专栏 1493

python模拟银行交易流水

模拟自动生成银行交易流水,其中包括:入账账号、出账账号、交易金额、交易余额、交易时间、出入表示关键字段

qq_31823889的博客 2910

不是所有的应用都需要Service Mesh架构

“微服务架构”的含义在过去十年里不断演变,今天的服务网格实现已经相当复杂,第二代 Service Mesh 诞生在 Kubernetes 之后,它的代表是 lstio。在 lstio 之外,同时存在着各种层出不穷的框架,解决的却都是相同的问题。 正确的选择框架却不是件简单的事情。就像在容器编排领域,之前我们有 Kubernetes、Docker Swarm、Mesos 和 Cloud Foundry,其中一些后来逐渐被市场淘汰,没有选择 Kubernetes 的企业有可能得从头再来一次。在微服务领域,我们

赶路人儿 639

node-red 可视化探索

配置socket选择配置流程产生url。

weixin_44133581的博客 3413

深入解析Zynq Ultrascale+ RF Data Converter中的PLL配置与时钟管理

本文深入解析了Zynq Ultrascale+ RF Data Converter中PLL配置与时钟管理的核心原理与实践。文章将RFDC时钟系统比作交响乐团,详细阐述了PLL作为指挥的关键作用,以及系统时钟、Tile时钟、参考时钟与采样时钟的层级关系。重点剖析了PLL配置参数(如VCO频率、分频器设置)的计算方法与稳定性考量,并提供了从IP配置使能顺序到多Tile同步、DRP访问等常见问题的实战避坑指南与调试技巧,帮助工程师构建稳定的射频信号处理基石。

7up55的博客 449

再启程,Service Mesh 前路虽长,尤可期许

凌云时刻 · 技术导读:理想太丰满,现实太骨感。你以为的Service Mesh是Service Mesh吗?作者 | 涵畅来源 |凌云时刻(微信号:linuxpk)前言几乎所有人都在...

云布道师 716

数字IC后端项目典型问题之后端实战项目问题记录

数字IC后端培训教程之数字后端实战项目问题debug及解决方案记录

weixin_37584728的博客 1715

SOFA Weekly | Occlum 发布新版本,Seata QA 整理

SOFA WEEKLY | 每周精选,筛选每周精华问答同步开源进展,欢迎留言互动SOFAStack(ScalableOpenFinancialArchitecture Stack)...

金融级分布式架构 308

青龙面板实战:用快手极速版脚本日赚XX元的核心参数解析

本文深入解析了青龙面板运行快手极速版脚本的核心参数配置,旨在帮助进阶用户提升收益稳定性。重点剖析了设备标识符(did)的获取原理、多账号Cookie的精准拼接规则,以及如何通过科学设置定时任务频率来量化并优化收益,实现细水长流的稳定收益。

weixin_29310605的博客 1075

【系统分析师】高分论文:论面向对象设计方法及应用

本文以某市职业院校合并后的信息化系统建设项目为例,探讨了面向对象设计方法在系统开发中的应用。作为系统分析师,作者在415.6万元、6个月工期的项目中,通过遵循单一职责原则(简化构件库)、依赖倒置原则(开发公共接口)和开闭原则(构件扩展)等设计原则,成功完成了5个子系统融合改造和4个智慧实训室建设。项目采用J2EE分层设计和SOA架构,最终在2022年11月顺利上线,提升了教学管理效率,获得用户好评。文章总结了设计原则对提高系统复用性、可维护性的重要作用,同时也反思了部署过程中的经验教训。

数据知道的博客 7955

springboot 故障注入_springboot+sidecar+kubernetes 能否取代springcloud体系?

在讲能不能替换之前,我们先看看Spring Cloud 是什么?Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实...

weixin_39916758的博客 425

Cesium 场景特效之【全球海洋】GL2兼容版

Cesium 场景特效之【全球海洋】GL2兼容版

喜欢钻研前端和分享技术 1278

What comes after microservice?

What comes after microservice? (Jin Qing’s Column, Oct. 25, 2021) Reading “The Evolution of Distributed Systems on Kubernetes” from Bilgin Ibryam. https://www.infoq.com/articles/distributed-systems-kubernetes/ What are the purpose of projects like Dapr, Is

金庆的专栏 188

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

微服务架构认识

微服务架构 微服务原理可以通过有界上下文使不同的业务领域脱钩解耦,每个微服务都可以独立开发,但是微服务架构无法解决将业务逻辑与中间件问题耦合在一起带来的困难。如果您的领域涉及复杂的集成,那么遵循微服务原则无法避免与中间件耦合。即使中间件作为包含在微服务中的库,当您开始迁移和更改这些库时,这种耦合也会变得显而易见。还有您需要的更多分布式技术,这些让微服务与集成平台的耦合就越多。 尽管传统的单体中间件(SOA/ESB)提供了分布式系统所需的所有必要技术功能,但它缺乏业务所需的快速更改,适应和扩展的能力。这就是为

陈海明 -全栈 221

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

HXAPIGate(中文名:浩心API网关)

简介 HXAPIGate是我最新开源的专门针对非springcloud家族的REST微服务的一款高性能网关,性能比Zuul更加优秀,依赖少,不依赖spring! HXAPIGate(中文名:浩心API网关)由HXAPIGate、bootshiroPro组成。 HXAPIGate基于Netty+Shiro开发的一款高性能API网关,对基于REST服务的细粒度API资源的权限管理平台,bootshir...

sinat_28771747的博客 1034

GPT-4o多模态工作流:手办与AI视频端到端定制实战

多模态大模型正从‘看图说话’迈向‘理解制造’与‘操控生产’的新阶段。GPT-4o作为具备语义推理、工具调度与跨模态校验能力的多模态中枢,突破了传统AIGC在工程落地中的关键瓶颈——它不再仅生成图像,而是协同DALL·E 3、Blender、Runway Gen-3等工具,完成从创意指令→可打印STL→高可控短视频的闭环。其核心价值在于将设计意图精准映射为物理约束(如壁厚1.2mm、活动间隙0.25mm)和时序参数(如BPM锚定镜头切换、音素级口型同步),显著提升实体化内容的一次通过率与跨平台复用性。本文聚焦

weixin_33843409的博客 411

绝地潜兵2模型替换教程:Milltina替换TG-8的底层原理与完整流程

在许多现代游戏中,模型替换早已不是简单的文件覆盖,而是涉及资源包、资源引用、骨骼挂点、材质映射与动画绑定的一整套工程链路。理解这些底层概念,是判断一个MOD是否可靠、并在失败时快速定位问题的关键。本文以《绝地潜兵2》中Milltina替换TG-8装备为例,从资源包的解包与定位、FBX等模型的格式适配,到骨骼绑定与挂点对齐、材质贴图重映射,再到重打包与安装验证,完整拆解一次规范MOD制作背后的逻辑。文章还提供了备份脚本、资源搜索命令、常见故障排查清单与工程化实践建议,既能帮助普通玩家避开悬空、彩色方块等经典陷

weixin_32658257的博客 293

如何看待 Dapr、Layotto 这种多运行时架构?

文|周群力(花名:仪式)Layotto PMCLayotto 和 SOFAStack 开源社区的建设Dapr 贡献者,Dapr sig-api 的 Co-chair本文10963字 阅读20分钟2019 年,微软开源了 Dapr 项目。2021 年,蚂蚁参照 Dapr 思想开源了 Layotto 项目。如今,蚂蚁已落地 Layotto,服务了很多应用。从理想落...

金融级分布式架构 450

Dapr 知多少 | 分布式应用运行时

IntroDapr 官方团队已于最近(2021.1.17)正式发布Dapr v1.0,Dapr已正式生产可用,可以部署到自托管环境或 Kubernetes 集群。对于绝大多数开发者来说,想...

圣杰 4798
上一篇: 陌陌的 Service Mesh 探索与实践 | 线上直播回顾
下一篇: 云原生网络代理 MOSN 透明劫持技术解读 | 开源
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值