云原生时代, 选择.NET Core

在容器、Kubernetes、DevOps,以及微服务等技术的推动下,2020年云原生势不可挡。 .NET Core 也非常契合 云原生对应用运行时的不同需求,.NET Core和kubernetes 同年诞生发展, 2018年kubernetes 已经奠定了在容器编排领域的王者地位,2019年越来越多的企业选择基于云原生的技术或管理方法,把业务生于云或迁移到云平台,从而享受云的高效和持续的服务能力。几年前火热的Spring Cloud面临Kubernetes的革命,如今.NET Core在云原生方面完成的蜕变:

  • 体积更小:对于微服务分布式架构而言,更小的体积意味着更少的下载带宽,更快的分发下载速度,.NET Core 的镜像体积都很小,alpine的镜像更小,带上应用程序通常80M。

  • 启动速度更快:对于传统单体应用,启动速度与运行效率相比不是一个关键的指标。原因是,这些应用重启和发布频率相对较低。然而对于需要快速迭代、水平扩展的微服务应用而言,更快的的启动速度就意味着更高的交付效率,和更加快速的回滚。尤其当你需要发布一个有数百个副本的应用时,缓慢的启动速度就是时间杀手。对于Serverless 应用而言,端到端的冷启动速度则更为关键,即使底层容器技术可以实现百毫秒资源就绪,如果应用无法在 500ms 内完成启动,用户就会感知到访问延迟。这里我拿AWS Lambda来举例,因为各大云厂商都是以AWS是模仿的目标,AWS Lambda中可用的所有语言都是高级的,而不是像Assembler,C / C ++或Objective C那样。从脚本语言到JavaScript和Python,再到像Java和C#到Go这样被编译为二进制文件的托管运行时的语言,所有语言都是他们有自己的长处。在基准测试中,最重要的.NET Core是 冠军,具体参看https://react-etc.net/entry/aws-lambda-benchmarks-node-js-python-java-c-go-dotnet-core

  • 占用资源更少:运行时更低的资源占用,意味着更高的部署密度和更低的计算成本。.NET Core的 CLR启动速度非常快,降低启动时资源消耗,可以减少资源争抢,更好保障其他应用 SLA。

  • 支持水平扩展:.NET Core 默认更好的支持Docker资源限制,官方团队也在努力让.NET Core成为真正的容器运行时,使其在低内存环境中具有容器感知功能并高效运行。随着内存成本的下降和虚拟化的流行,大内存配比已经成为趋势。所以我们一般是采用水平扩展的方式,同时部署多个应用副本,在一个计算节点中可能运行一个应用的多个副本来提升资源利用率。

上面说了.NET Core在云原生方面所完成的蜕变,很多人可能会以Java生态丰富来说明Java的种种优势,所以这里我想一起来看看十年前李彦宏、马化腾和马云对云计算的评价:

站在现在的位置往回看,七年前李彦宏、马化腾的观点确实是挺幼稚的。一个犯了商业判断上的错误,认为用公有云(虽然这个会上谈的是云计算,但指的是AWS、阿里云这样的公有云)方式赚点钱会比较累,商业价值不大;一个犯了技术判断上的错误, 认为要大规模地,像水和电那样提供计算资源,技术上要做到没这么快,需要时间。 但是公有云此后的高速发展,即证明了自身的巨大的商业价值,也证明了现有技术的能力和潜力。

经过8年的发展,公有云已经不仅仅像李彦宏说的,支撑一些互联网应用这么简单,而是巨大的,充满希望和想象的平台。现在我们所说的云原生已经不局限于AWS,阿里云,腾讯云这样的公有云,也不是仅仅局限于私有云,而是我们在开始设计应用的时候就考虑到应用将来是运行在云环境里面的,要充分利用云资源的优点。但从不同的角度,你能够看到这个平台不一样的威力。

马化腾说云计算难做, 短期内很难做好的观点,虽说太悲观, 但也是说出了广大后台程序猿的心声。 从个人研发的经历而言, 我们有两种完全不一样的开发,一种是单机软件的开发,另一种是分布式后台开发。单机软件开发, 更多的是专注于业务本身, 计算和存储资源的获取很轻松地搞定、模块间通信无比简洁美好根本不用操什么心,见过大量的.NET程序员开发的都是这种单机软件开发,他们的系统做个集群都难;而分布式后台开发,在计算资源、存储资源或业务逻辑单元在做了 “分” 这个操作后, 就变得无比揪心,你会发现做后台的业务简单,但做一个稳定高性能的架构难,做一个能够扛住海量用户和请求,还能够动态生长以应对业务变化需求的后台更是难上加难。

海量后台服务研发方法论方面在这个世界上也有腾讯海量服务之道和Google 的另一套后台哲学:

腾讯对后台开发的理解是这样的:放弃建立一个统一模型,按照这个模型去套各种业务,就能够为业务建立一个完善的架构,而且这个架构能够适应业务后续的发展。 而是用动态生长的眼光,以小步快跑的方式,用柔性的手段去处理和和各种分布式问题周旋,最终成功支撑业务向前发展。

Google的另一套后台哲学:根据自身业务抽象出几大基础后台系统(比如GFS、BigTable、Spanner、Borg、Tensorflow 等), 支撑业务的开发,从而业务可以专注于自身逻辑, 不需要关注底层分布式细节,这个对技术人要求就非常高,微软也是这样的一个套路。由于我没有在Google呆过,对Google不太了解,只能从Google 在10几年的引领技术潮流的技术做个概括。这里说说kubernetes吧,早在2003年google 就在运行容器,当时的容器调度系统叫做Borg,到后面的Omega,向Linux内核贡献 CGroup【CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。这个项目最早是由Google的工程师在2006年发起(主要是Paul Menage和Rohit Seth),最早的名称为进程容器(process containers)。在2007年时,因为在Linux内核中,容器(container)这个名词太过广泛,为避免混乱,被重命名为cgroup,并且被合并到2.6.24版的内核中】,2014年开源kubernetes项目,这十多年来google一直在容器中运行所有产品。具体参见《Borg、Omega和Kubernetes:谷歌十几年来从这三个容器管理系统中得到的经验教训》

 

这两套方法论,目标相同,但是思路相反。个人认为, 能够解决问题,帮助业务往前走的发展都是好方法,除此之外, 并没有一个标准能够用来评判哪个好哪个不好。 两种典型的后台价值观,分别支撑起排名前几的两家互联网公司,就足以说明其成功之处。但是从中我们可以看出, 做后台特别是海量服务的后台之难。 由此不难理解马化腾所说, 需要等到阿凡达的时代,像水和电一样的云计算才能够实现。

时代的潮流滚滚向前,我现在来到了云原生时代,在容器化的世界里,Kubernetes是环境的管理和部署引擎。使用Kubernetes的最基本功能,用户就可以轻松地在物理硬件或者虚拟机上调度并且运行应用程序。Kubernetes的更多高级用法让开发人员可以彻底摆脱主机为中心的世界,而进入容器为中心的环境里。

应用程序是如今大多数业务的生命线。公司需要快速的部署和高质量的应用程序。这些需求正是开发人员转向容器的原因。随着容器的发展,Kubernetes平台有很多的可能性,但是规模大了的话它也很难管理。云原生时代一定要拥抱,这是云原生时代给予.NET Core的机会,我希望大家能够抓住。

说到这里,这里特别要和你分享一件事情是2018年的11月我有幸参观访问了肖伟宇所在的公司校宝在线,当时我也是刚从腾讯离职从事.NET Core的咨询服务工作,当时他们正是在进行.NET向.NET Core迁移的关键时期,他们同时处在阿里巴巴大本营的杭州(在最近我做的一个调查中很多杭州兄弟都提到了这一点),而且当时阿里巴巴已经投资了校宝在线,坊间一直流传着这么一个梗:被阿里巴巴投资的公司都转向了Java,可想而知,校宝在线作为杭州地区最大的一家.NET技术公司 的兄弟们面临多大的压力,在经过了一年多时间的探索,肖伟宇作为校宝在线的架构师带领.NET兄弟成功走向.NET Core云原生的道路,这是非常值得分享的一件事情,而且难能可贵的是肖伟宇把这个探索道路上的艰难险阻总结提炼成这样一门视频课程。这里我非常推荐大家购买肖伟宇结合自己的经验精心提炼的视频课程。

【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发

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

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

相关文章

WebApi管理和性能测试工具WebApiBenchmarks

说到WebApi管理和测试工具其实已经非常多的了,Postman、Swagger等在管理和维护上都非常出色;在性能测试方面也有不少的工具如:wrk,bombardier,http_load和ab等等。不过这些工具都具有单一性,管理和维护好的在性能测试上比较低效,对…

android中的shape资源,Android Drawable资源讲解之shape篇

运用好Android的drawable资源,在开发中就可以减少图片的使用量,这样既缩小了app的体积,也省去了设计图片的时间,而且也容易适配不同的屏幕尺寸。今天首先来讲讲shape资源的使用。1. Shape的属性介绍shape共支持四种形状&#xff0…

C# WPF 一个设计界面

微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏。C# WPF 一个设计界面今天正月初三,大家在家呆着挺好,不要忘了自我充电。武汉人民…

android中shape的属性,android中shape的属性

solid:实心,就是填充的意思android:color指定填充的颜色gradient:渐变android:startColor和android:endColor分别为起始和结束颜色,ndroid:angle是渐变角度,必须为45的整数倍。另外渐变默认的模式为android:type”line…

合集| 21 篇技术文章,带你从零入门 K8s

由阿里云与 CNCF 共同开发的《CNCF x Alibaba 云原生技术公开课》(视频课程)第一期已更新完毕。为了让大家有更好的学习体验,我们把视频课程转为图文,并请讲师重新编辑成文章,在公众号以“从零入门 K8s” 为系列进行每…

比尔盖茨早有预警:对大疫情爆发我们还没准备好

比尔盖茨早已预警,如今全球最大的危险不是核战争,而是高度传染的病毒,不是导弹,而是微生物。新型冠状病毒感染肺炎新增病例数仍在增长,钛媒体根据百度数据统计官方发布显示,截止发稿前1月30日9:30&#xff…

AcWing 3208. Z字形扫描

在图像编码的算法中,需要将一个给定的方形矩阵进行 Z 字形扫描(Zigzag Scan)。 给定一个 nn 的矩阵,Z 字形扫描的过程如下图所示: 对于下面的 44 的矩阵, 1 5 3 9 3 7 5 6 9 4 6 4 7 3 1 3 对其进行 Z 字形扫描后得到长度为 16 的…

写公众号的这一年多

2018年五月,在微信发布公众号助手之时我开通了个人公众号「不止dotNET」,到现在已经一年半多的时间了,非常时期,在家自我隔离,没事写写总结。数据总共发布了 53 篇原创文章,离之前的目标(每周一…

AcWing 703. 数独检查

**数独是一种流行的单人游戏。 目标是用数字填充9x9矩阵,使每列,每行和所有9个非重叠的3x3子矩阵包含从1到9的所有数字。 每个9x9矩阵在游戏开始时都会有部分数字已经给出,通常有一个独特的解决方案。 给定完成的N2∗N2数独矩阵&#xff0c…

pdf文件内容查看器 -- 采用wpf开发

前言 pdf是一种应用非常广的版式文档格式,已成为事实上的国际标准。关于pdf格式的文章汗牛充栋,本文也是关于pdf格式的文章,但是本文不是纸上谈兵;本人这几周一直研究pdf格式内容,不但对pfd格式的内容有所了解&#xf…

​WeihanLi.Npoi 根据模板导出Excel

WeihanLi.Npoi 根据模板导出ExcelIntro原来的导出方式比较适用于比较简单的导出,每一条数据在一行,数据列虽然自定义程度比较高,如果要一条数据对应多行就做不到了,于是就想支持根据模板导出,在 1.8.0 版本中引入了根据…

UC浏览器如何开启html5,如何开启手机uc浏览器中的极速模式

如何开启手机uc浏览器中的极速模式当我们在使用手机的时候,可以下载uc浏览器来浏览网页,为了提升网页的浏览速度,可以开启浏览器中的极速模式,接下来就由小编来告诉大家如何操作。具体如下:1.第一步,打开手…

前端扫盲:什么是API网关?为什么它有用?

API 通常被称为应用程序从后端服务访问数据和业务逻辑的前门。API 本质上是一个软件向其他人或程序提供的接口,允许他们与该软件进行交互。 在创建 API 时,需要选择编程语言(Java、Python、PHP 等)来编写 API 逻辑,还需要将 API 部署到服务器…

ProjectFileManager 发布!项目文件管理效率提升10倍以上!

值此特别的新春假期,盛派网络在这里先祝大家新春安康!鼠年平安、幸福、发财、万事如意!也祝福疫区的同胞和医护人员平安度过这一段关键时期!延长的假期显然也为我们日常工作带来了一些障碍,为了能够利用工具进一步提高…

简历中能熟练使用计算机怎么写,过了计算机二级,可以在简历里写“熟练掌握Excel”吗?...

原标题:过了计算机二级,可以在简历里写“熟练掌握Excel”吗?咨询/快消/互联网/四大/投行PEVC/券商绝大多数岗位都会要求“熟练掌握Excel”而尽管绝大多数同学“实际水平根本达不到工作要求”但是每一位同学都敢在简历上放一句薛定谔的「熟练掌…

.Net Core 认证系统之基于Identity Server4 Token的JwtToken认证源码解析

介绍JwtToken认证之前,必须要掌握.Net Core认证系统的核心原理,如果你还不了解,请参考.Net Core 认证组件源码解析,且必须对jwt有基本的了解,如果不知道,请百度.最重要的是你还需要掌握identity server4的基本用法,关于identity server4因为涉及到两个协议Oath2.0和openid conn…

【C# 调用 Go 语言】0x2 参数、返回值与类型转换

在上篇文章【C# 调用 Go 语言】0x1 Hello Golang 中,我们将 Golang 源码编译为动态链接库(dll),用 C# 调用 Golang 导出的方法并成功的看到了控制台的输出。本篇文章将对 C# 调用 Golang 方法做更详细的介绍,涉及如何…

《ASP.NET Core 微服务实战》-- 读书笔记(第1章 、第2章)

译者序微服务设计方法清晰定义了各个开发团队的业务边界,微服务框架以不同方式实现了服务之间的协作与集成。.NET Core 作为全新的 .NET 技术,它不仅完全开源、跨平台,更面向云原生开发进行了大量细致的优化。它完全模块化,不依赖…

html缩进标签quote,HTML blockquote 标签

HTML 标签标签同样是对文本进行引用,不同的是该标签引用的是长文本。标签内的内容会自动有缩进。实例定义一个摘自另一个源的块引用:For 50 years, WWF has been protecting the future of nature. The worlds leading conservation organization, WWF w…

使用BeetleX.NetBenchmark压测TCP,HTTP和Websocket服务

真没想到大过年还在家里写代码写文章,本来还打算自驾半个月没想出现这情况。在这里祝福全国同胞在新的一年里身体健康!希望阳光天气早日照射在这片土地上,给人带来新一年的希望!NetBenchmark是针对网络服务压测的开源组件&#xf…