.NET 生态系统的蜕变之 .NET 6云原生
云原生的英文名是cloud native,native 就是土著的意思,也就是土著对当地的环境是非常适应的,在云的环境和传统的数据中心是非常不同的,云原生就是要用的云的技术来构建应用, 利用云的技术来降低种端服务的风险和提高可用性,.NET Core和kubernetes 同年诞生发展, 2018年kubernetes 已经奠定了在容器编排领域的王者地位,2019年之后越来越多的企业选择基于云原生的技术或管理方法,把业务生于云或迁移到云平台,从而享受云的高效和持续的服务能力。
随着2021年kubernetes 的进一步普及, 微服务构建也转向了以Sidecar 模式,这种Sidecar 模式正在以更加迅猛的势头将中间件领域的能力下沉至 Kubernetes 这个新一代的应用基础设施当中,除了已经如火如荼的 Istio 对流量治理领域的颠覆,微软在CNCF 社区开源了 Open Service Mesh ,在Service Mesh这个领域处于战国时期,各种框架百花齐放。而与此同时, OAM 在微软的姊妹项目 Dapr 则直接拉齐了 Kubernetes 与中间件在“服务发现与绑定”侧的距离。所有这一切背后的用户动机是非常清晰的:云原生时代的中间件,既要语言无关,也要平台无关。
在所有问题上,对于任何给定的项目而言,正确的方法都可能介于两个极端之间(要么微服务架构,要么单体架构),微服务的构建在企业软件设计中正在取得平衡,不会再走向极端,而是接受了微服务的真正内涵,既与语言无关,又与平台无关,选择适合自己团队背景的技术构建云原生应用,对于dotnet 技术背景的团队在构建云原生应用,.NET 6为你提供了很好的技术底座。
- 体积更小:对于微服务分布式架构而言,更小的体积意味着更少的下载带宽,更快的分发下载速度,.NET 6的镜像体积都很小,alpine的镜像更小,带上应用程序通常80M。 
- 启动速度更快:对于传统单体应用,启动速度与运行效率相比不是一个关键的指标。原因是,这些应用重启和发布频率相对较低。然而对于需要快速迭代、水平扩展的微服务应用而言,更快的的启动速度就意味着更高的交付效率,和更加快速的回滚。尤其当你需要发布一个有数百个副本的应用时,缓慢的启动速度就是时间杀手。对于Serverless 应用而言,端到端的冷启动速度则更为关键,即使底层容器技术可以实现百毫秒资源就绪,如果应用无法在 500ms 内完成启动,用户就会感知到访问延迟。 
- 占用资源更少:运行时更低的资源占用,意味着更高的部署密度和更低的计算成本。.NET 6的 CLR启动速度非常快,降低启动时资源消耗,可以减少资源争抢,更好保障其他应用 SLA。 
- 支持水平扩展:.NET 6默认更好的支持Docker资源限制,官方团队也在努力让.NET 6成为真正的容器运行时,使其在低内存环境中具有容器感知功能并高效运行。随着内存成本的下降和虚拟化的流行,大内存配比已经成为趋势。所以我们一般是采用水平扩展的方式,同时部署多个应用副本,在一个计算节点中可能运行一个应用的多个副本来提升资源利用率。 
上面说了.NET 6 在云原生方面所完成的蜕变,很多人可能会以Java生态丰富来说明Java的种种优势,.NET 6相对于Java 17在云原生时代有太多的优势,.NET团队早在2014年完成转型,在云原生时代完成了蜕变,和Java相比已经是不同的世界,.NET更多的向Go、Rust等轻量级平台靠齐。随着 Dapr 在2021年2月份发布了1.0版本,它为我们提供了一组构建块和支持工具,可帮助我们以易于部署和可重复的方式实现关键的微服务设计模式,有了Dapr的支持,再来谈Java 生态丰富就有点可笑。

Dapr 当前有7大模块,每个模块都是为云原生应用开发的特定问题准备的,其中核心模块是Actor。
Actor 是一种并发编程的模型,Actor 表示的是一个最基本的计算单元,封装了可以执行的行为和私有状态。actor 之间相互隔离,它们并不互相共享内存,也就是说,一个 actor 能维持一个私有的状态,并且这个状态不可能被另一个actor所改变。在 actor 模型里每个 actor 都有地址(信箱),所以它们才能够相互发送消息。每个 actor 只能顺序地处理消息。单个actor不考虑并发。
Dapr 中 actor 是虚拟的,它们并不一定要常驻内存。 它们不需要显式创建或销毁。 dapr actor runtime 在第一次接收到该 actor ID 的请求时自动激活 actor。 如果该 actor 在一段时间内未被使用,那么 runtime 将回收内存对象。 如果以后需要重新启动,它还将还原 actor 的一切原有数据。
Actor placement service 为系统提供了 actor 分发和管理,placement 会跟踪 actor 类型和所有实例的分区,并将这些分区信息同步到每个 dapr 实例中,并跟踪他们的创建和销毁。

Dapr的Virtual Actor 源自dotnet的老牌开源项目Orleans:https://github.com/dotnet/orleans。 Orleans 更像是Spring Cloud构建微服务的体系,局限在.NET社区里,如果你喜欢使用Orleans 构建微服务,最近正好出版了一本Orleans的中文书《Orleans:构建高性能分布式Actor服务》 ,Dapr Actor 把 Orleans 带到所有的社区,如果你是用java,可以使用spring boot + dapr actor 写业务,这里可以给你一个案例,就是深圳的 行云创新他们就是用的这个组合,具体可以参考b站视频《直播回顾:Dapr——云原生开发新思路》。

.NET 生态系统的蜕变之 .NET 6云原生的更多相关文章
- 直击KubeCon 2018 |云原生正在改变你的衣食住行
		云计算从不被看好到成长为势不可挡的技术潮流,仅仅用了十年的时间.如今“云原生”又被企业以及开发者奉为圭臬,并被认为是云计算的未来. 阿里云容器技术负责人易立认为云计算有三个阶段:云搬迁.云就绪和云原生 ... 
- 进击的.NET 在云原生时代的蜕变
		你一定看过这篇文章 <进击的 Java ,云原生时代的蜕变>, 本篇文章的灵感来自于这篇文章.明天就将正式发布.NET Core 3.0, 所以写下这篇文章让大家全面认识.NET Cor ... 
- .NET 在云原生时代的蜕变,让我在云时代脱颖而出
		.NET 生态系统是一个不断变化的生态圈,我相信它正在朝着一个伟大的方向发展.有了开源和跨平台这两个关键优先事项,我们就可以放心了.云原生对应用运行时的不同需求,说明一个.NET Core 在云原生时 ... 
- 【转】.NET 在云原生时代的蜕变,让我在云时代脱颖而出
		原创:张善友 原文:https://www.cnblogs.com/shanyou/p/12198741.html .NET 生态系统是一个不断变化的生态圈,我相信它正在朝着一个伟大的方向发展.有了开 ... 
- 进击的 Java ,云原生时代的蜕变
		作者| 易立 阿里云资深技术专家 导读:云原生时代的来临,与Java 开发者到底有什么联系?有人说,云原生压根不是为了 Java 存在的.然而,本文的作者却认为云原生时代,Java 依然可以胜任&qu ... 
- 一份关于.NET Core云原生采用情况调查
		调查背景 Kubernetes 越来越多地在生产环境中使用,围绕 Kubernetes 的整个生态系统在不断演进,新的工具和解决方案也在持续发布.云原生计算的发展驱动着各个企业转向遵循云原生原则(启动 ... 
- Kubernetes v1.16 发布 | 云原生生态周报 Vol. 20
		作者:心贵.进超.元毅.心水.衷源.洗兵 业界要闻 Kubernetes v1.16 发布 在这次发布中值得关注的一些特性和 Feature: CRD 正式进入 GA 阶段: Admission We ... 
- Ubuntu 19.10 发布 | 云原生生态周报 Vol. 24
		作者 | 木苏.进超.冬岛.元毅.心水.衷源 业界要闻 1.云原生编程语言 Pulumi 1.0 pulumi ,一款中立的开源云开发平台,Pulumi 支持多语言.混合云环境.完全可扩展.初期支持 ... 
- Helm 3 发布 | 云原生生态周报 Vol. 27
		作者 | 墨封.元毅.冬岛.敖小剑.衷源 业界要闻 1.Helm 3 发布 美国时间 11 月 13 日,Helm 团队发布 Helm 3 第一个稳定版本.Helm 3 以 Helm 2 的核心特性为 ... 
随机推荐
- TP5模型开启事务
			和Db开启事务类似,Db是静态方法 $userObj = new UserModel(); $userObj->startTrans(); try { $userObj->data($da ... 
- php move_uploaded_file保存文件失败
			move_uploaded_file保存失败后找错,先使用了try catch,但是没输出信息,才知道该函数在php中是警告属于error,不属于exeption,因此不能通过简单的if(!...)处 ... 
- C# 获取动态类中所有的字段
			/// <summary> /// 动态类 获取字典集合 /// </summary> /// <typeparam name= ... 
- Postman 如何调试加密接口?
			大家好,我是安果! 众所周知,Postman 是一款非常流行且易用的 API 调试工具,在接口调试或测试时经常被使用针对普通 API 接口,我们可以直接在 Postman 中输入 URL.Query ... 
- self this
			面向对象编程(OOP,Object OrientedProgramming)现已经成为编程人员的一项基本技能.利用OOP的思想进行PHP的高级编程,对于提高PHP编程能力和规划web开发构架都是很有意 ... 
- CF802O-April Fools‘ Problem(hard)【wqs二分,优先队列】
			正题 题目链接:https://www.luogu.com.cn/problem/CF802O 题目大意 \(n\)天每条有\(a_i\)和\(b_i\). 每条可以花费\(a_i\)准备至多一道题, ... 
- Fiddler抓HTTPS接口数据,安装证书并不复杂,超详细的图文解说,不信你看!
			@ 目录 前言 安装环境 配置网络 IP 端口 配置网络 浏览器打开下载链接 下载证书 安装证书 证书安装坑 前言 抓包是我测试工作中必须要学会的一个工具,我们都知道,抓取HTTPS接口里需要安装证书 ... 
- 【深度学习】softmax回归——原理、one-hot编码、结构和运算、交叉熵损失
			1. softmax回归是分类问题 回归(Regression)是用于预测某个值为"多少"的问题,如房屋的价格.患者住院的天数等. 分类(Classification)不是问&qu ... 
- java语言程序设计与数据结构(基础篇)第二章答案
			答案为本人自己求解,若有错误,还望海涵并及时告知.如有雷同,纯属巧合. 2.1 import java.util.Scanner; public class Welcome { public stat ... 
- Spring Boot 如何热加载jar实现动态插件?
			一.背景 动态插件化编程是一件很酷的事情,能实现业务功能的 解耦 便于维护,另外也可以提升 可扩展性 随时可以在不停服务器的情况下扩展功能,也具有非常好的 开放性 除了自己的研发人员可以开发功能之外, ... 
