.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 生态丰富就有点可笑。

90c08f189a4e2811adeafdc64420713a.png

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 实例中,并跟踪他们的创建和销毁。

638312a44d461b4fad2cc254c3026d3a.png

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——云原生开发新思路》。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hibernate 持久化状态、HQL语句大全(转)

Hibernate 持久化状态在Hibernate中,最核心的概念就是对PO的状态管理。一个PO有三种状态: 1、未被持久化的VO 此时就是一个内存对象VO,由JVM管理生命周期 2、已被持久化的PO,并且在Session生命周期内 此时映射数据库数据&…

如何让两个安装程序setup共享同一个component—— installing shared files(version:installshield develop8.0)...

如何让两个安装程序(setup.exe),共享同一个component?  要实现的效果是,两个程序共享同一个dll,当两个程序中有一个被卸载掉时,这个dll仍存在,不随着第一个卸载而从系统中删除&…

世界十大无法科学解释灵异事件(进来发表自己看发)

1、法老咒语(世界最大灵异事件) 2、葡萄牙灵异事件(在网上引起了极大的轰动) 3、伦敦塔闹鬼(超著名) 4、20世纪上海滩灵异事件(孟小冬照片灵异事件) 5、鬼脸(墙壁上出…

宝塔linux面板假设nextcloud,宝塔面板部署NextCloud(14.0.3)逐一解决后台安全及设置警告...

刚刚把NextCloud更新到14.0.3,后台又出现了一堆警告,也是够烦的。之前写过 宝塔面板部署NextCloud逐一解决后台安全及设置警告,那个是基于Nextcloud 13.x的,所以就再补充记录一下解决如下的警告。Use of the the built in php mai…

ASP.NET Core启动地址配置方法及优先级顺序

前言默认情况下,ASP.NET Core使用下列2个启动地址:http://localhost:5000 https://localhost:5001同时,我们也可以通过配置或代码方式修改启动地址。那么,这几种修改方式都是什么?谁最后起作用呢?设置方法1.applicatio…

那些喜欢少妇的男生......

1 听说你喜欢少妇?▼2 没错!就是它!▼3 你还缺男朋友吗?▼4 还能怎么样?(via:臭人脸上的鼻涕)▼5 特效还能这样玩?▼6 哈哈哈哈哈(via:Guide&…

Openfire3.10beta版源码在eclipse上部署编译

一、源码下载 最近由于需求,需进行openfire的插件开发,于是需将openfire的源码进行部署,目前最新的openfire稳定版本是3.9.3,官方下载地址是http://www.igniterealtime.org/downloads/index.jsp,下载页面如图&#xff…

怎样理解Linux的文件系统

怎样理解Linux的文件系统Linux所有文件都从root开始,用/代表, 并且延伸到子目录。DOS/Windows有不同的分区同时目录都存于分区上。Linux则通过加载的方式把所有分区都放置在root下制定的目录里。windows下最接近于root的是c:。一句话总结:Windows下&…

POJ 1850 Code(组合数学)

题目链接 这个题目的组合解法,太巧妙了。长度为n的方案数总和为C(26,n),我竟没有发现。。然后长度和字符串相等的时候的情况,第一位默认,以后默认为前一位1,这样才能保证递增特性。 网上还有DP解法,智商拙计…

(10) 需求征集 -- 权限管理

权限管理,都碰到过哪些需求?我们汇总看看,能汇总出多少需求来?将权限管理、工作流管理做到我能力的极致,一个人只能做好那么很少的几件事情。转载于:https://blog.51cto.com/jirigala/787926

c语言中英文的作用,C语言中英文对照.doc

C语言中英文对照一File(文件) Load 加载 F3 Pick(选择) Alt-F3New 新文件Save 存盘 F2 Write To 写文件Directory 目录Change Dir 改变目录OS Shell 暂时退出Quit 退出 Alt-x二Edit 编辑 Line n Col n Insert Indent Tab Fill Unindent * D;FILE1.CLine n 光标处在文件的第n行C…

首次公开!人教版1-9年级绝密编写:被重点中小学永久收录的数学教案和试题...

全世界只有3.14 % 的人关注了爆炸吧知识在中国的教育历史上,不少人都会有感慨:“我是读着人教版教材长大的”。(人教版即由人民教育出版社出版。)的确,由毛泽东主席亲笔题写社名的人民教育出版社,自1950年1…

如何通过 C# 自动捕获一个文件的变更?

咨询区 PaulB:请问在 C# 中如何实现当一个磁盘文件的变更,让我的程序马上能感知到?回答区 Dirk Vollmar:在 C# 中有一个 FileSystemWatcher 类,它专门用来做文件的变更感知,大概有如下四类通知事件&#xf…

新随笔

2012年2月27日 岁数大了,特别愁得慌。 转载于:https://www.cnblogs.com/laozhang/archive/2012/02/27/2369771.html

Rails 开发小贴士积累

Model (ActiveRecord) 中 Boolean 类型的属性,在做是否存在的校验的时候,不能使用 presence: true ,而是要使用 inclusion: { in: [true, false] }。否则,当值为 false 的时候,会校验失败。 ClienSideValidations 对 Boolean 类型…

安装分布式文件系统MooseFS

示意图#4种角色共有的安装步骤yum install gcc zlib zlib-devel fuse fuse-devel fuse-libs libpcap libpcap-devel net-tools useradd mfs -s /sbin/nologin cd /download/ tar xf moosefs-2.0.80.tar.gz cd moosefs-2.0.80 ./configure \ --prefix/usr/local/mfs \ --with-de…

太爽了!宅男醒来后,发现自己变成了……

全世界只有3.14 % 的人关注了爆炸吧知识小编这两天看了一本关于数学家的故事后开了一个脑洞:如果把那些数学大神的故事写成爽文会是什么样?以下内容,纯属娱乐和虚构。前方高能预警第一章 称王冠原来是这样的“阿基米德,国王叫你呢…

陈睿学长在CUIT建校70周年校庆上的演讲

【个人成长】| 总结/Edison Zhou1睿叔演讲背景10月23号,我的母校成都信息工程大学(以下简称CUIT)举行了建校70周年(1951~2021)校庆,B站(哔哩哔哩)董事长兼CEO陈睿(睿叔&a…

SSH基本原理和免密码登录

SSH基本原理和免密码登录SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全…

poj2442Sequence(优先队列)

http://poj.org/problem?id2442 题解http://www.cnblogs.com/372465774y/archive/2012/07/09/2583866.html 本来写的二维数组 &#xff0c;直接対一维排序 不知道为嘛一直WA 只好该为一维的 就AC了 View Code 1 #include <iostream>2 #include<cstdio>3 #includ…