今天下午在騰訊雲+社區社區分享了《基於Kubernetes 構建.NET Core技術中台》,下面是演講內容的文字實錄。
我們為什么需要中台
我們現在處於企業信息化的新時代。為什么這樣說呢?
過去企業信息化的主流重心是企業內部信息化。但現在以及未來的企業信息化的主流重心是企業外部信息化。
中國互聯網從1998年算起(新浪搜狐網易都在那一年成立),到現在過去了20年。在這20年里,也就兩個階段。按to C的分法就是PC互聯網時代、移動互聯網時代,按to B的分法營銷時代、交易時代。第一個10年(1998-2008),不管你是搞音樂圖片視頻,還是你搞新聞、爬蟲新聞、博客論壇,本質上就一個事:做內容拉消費者流量然后拉企業廣告變現。到了第二個10年(2008-2018),給企業倒流量,企業已經不信了,你給我多少點擊量沒用,我歸根到底還是得看我賣出了多少東西。所以中國互聯網進入了交易時代。從2008年之后,中國電子商務公司如雨后春筍爆發,就是因為這個歷史大規律背景。未來十年(2018-2028),進入了第三個時代。因為在第二個十年,有了消費者也有了訂單了,但是上游生產、采購、研發設計不給力啊。市場機會轉瞬即逝,誰快誰就能抓住機會。所以上游生產、采購、研發設計必須要變革,來適應下游消費者訂單。這就是中國互聯網企業紛紛進入to B市場紛紛進入企業服務領域的根本歷史大背景。
中國企業軟件,從內部單部門單崗位應用,進化到內部多部門多崗位應用,后來又到整個企業乃至整個企業集團的全部應用。再往大長,就必須要突破企業邊界,進化到企業的衣食父母(客戶)的信息化,這就是我說的連接客戶(消費者),讓消費者直接參與到企業IT業務流程處理中。進而再進化到連接企業的上下游,為消費者需求與訂單進行通力合作、敏捷互動。最后再進化到連接社會基礎設施,如工商稅務海關銀行、交管車管、國土住建、社保民政、質檢安監..。
現在以及未來的企業信息化的主流重心是企業外部信息化:連接消費者、連接產供銷研上下游、連接社會基礎設施單位。因為要連接消費者。也就是說,消費者在哪里,我們就要連接哪里。這勢必造成了IT應用微型化、場景化、碎片化。尤其現在是移動互聯網時代,App技術特性決定了流量是被碎片化的不能聚合的。
中國的消費者是巨量的。中國每一個省就相當於歐洲的一個國家的大小、GDP規模、人口數量。我們必須把我們過去鐵板一塊的應用拆分拆分。與外部連接相關的的應用場景,一定要做成微型化、場景化、碎片化、微服務Open API技術,這樣便於快速連接、快速迭代改變。
業務中台
業務中台,主要就是業務支持,比如統一會員、統一認證、統一營銷、統一訂單、統一庫存、統一支付,這些統一的東西來自一個地方,分別支持多個系統對業務的管理要求,不同系統開發的時候,可以直接從這里獲取這個功能,而不需要再開發,從而把更多的系統連接在一起。 業務中台使得任何一條業務線都具備整個公司的核心能力。
應用中台
做商業應用級別的基礎設施,就必須擁有應用中台,如企業雲盤、音視頻會議、企業直播、IM、多觸點交互機器人、聚合支付、電子發票、電子合同、電子憑證、銀企直聯...,他們都帶有業務應用特征,不是純技術。但是他們又不是具體的業務場景應用,不是類似零售、制造、人力、財稅、OA、供應鏈、CRM等等。
技術中台
騰訊組織架構調整中,我印象比較深刻的是“騰訊成立技術委員會,通過內部分布式開源協同,加強基礎研發,打造具有騰訊特色的技術中台等一系列措施,促成更多協作與創新”。
技術中台,過去我們把他們叫做技術平台。它是企業應用的技術平台。
為啥過去叫技術平台,現在就叫技術中台了呢?
因為過去技術平台是恆定的。也就是說,你發布了一個版本,你用一年它也是這個功能能力,你用十年它也是這個功能能力,功能能力是不變的。 但是,有了數據和AI驅動,這個技術平台就不恆定了。它里面的很多功能特性就在天天進化、天天模型、參數在自動調節。所以我們就把技術平台升級到了技術中台的概念層面。
不要把中台部署到企業內部私有環境中,這是錯誤的方向,這是老舊的技術平台的思維。如果部署在企業內部私有環境中,它就接受不到社會360度海量數據的訓練了,它只能接受你這一家企業單點的數據訓練了,所以它就成三歲小孩了,智力不增長了。
如果你部署在公有雲或者專屬雲上,就會接受我們日常360度的數據訓練,它的智力就會天天進化,隨着社會動態變化不斷自動調節適應了。
你可以把和外部連接的應用放到公有雲上,因為他們是外部連接型的,你把他們放到你的內部私有環境中他們就跑不起來了。
你當然可以把你只內部的應用放到你的內部私有環境中。要把公有外部連接的應用和純內部使用的應用連接在一起,這就需要到了技術中台。按照這個角度來看,中台也不應該部署在私有環境中啊。它一定要放在混合雲環境中,這樣才方便公有雲應用和私有雲應用連接打通。
在技術中台這里,最核心的就是集成中台:
1、集成各類企業內部ERP
2、集成各類公有雲SaaS
3、集成各類互聯網電子商務Open API
4、對外統一開放API,便於外部生態應用接入與融合
你看,大量都是內外連接能力,需要經常變動、需要內外通暢。
數據中台
所謂的數據中台,是帶有產業主數據、畫像標簽、業務模型、業務算法的。
數據中台,利用獲取的各類信息、行為習慣信息和算法,獲取分析結果,比如業務中台參照的客戶標准和分類方法就是基於數據中台運算的分析結果,例如需求偏好(客戶標簽)。 數據中台的數據來自業務系統,有原始數據(不同頻次的歷史快照+實時數據)、共享數據(拉到一起)、萃取數據(已經整理的標准化數據、標簽、模型),再反哺給業務中台用起來。以精准營銷為例,數據中台支持算法,業務中台基於算法的結果,支撐實時推薦。
基於K8s&.NET Core搭建技術中台
深圳市友浩達科技有限公司根據企業在架構、技術、研發、運營、業務發展等方面的實際需求,打造“容器”+“微服務”+“AI”的創新性解決方案。
到 2020年, 超過50% 的企業將在生產中運行關鍵任務、容器化的雲原生應用程序,k8s 成為容器編排工具的王者。
現在, 所有雲提供商提供托管 Kubernetes 服務, 甚至Docker和 DC/OS 集成 Kubernetes
為什么Kubernetes 能夠如此成功?
- 社區: 項目被捐贈給一個 OSS 基金會 (雲計算原生計算基金會) 很早就和其他主要的成員 (尤其是紅帽) 參與, 把它從谷歌分離, 並避免鎖定在谷歌
- 容器-本機: 一些協調器 (即 DC/OS) 將容器添加到現有的調度技術中, 這確實很靈活的, 但可以感覺到 "附加", 就包括微軟的service fabric 也是把容器的調度技術添加進去,kubernetes 確實天生設計為容器調度
- 以規模應用的最佳實踐為基礎: Kubernetes項目組的成員用Go語言重構了Brog系統,並得到了Brog系統開發者的大力支持。其他項目 沒有這樣的成熟度。
Kubernetes 的網絡效應現在如此強大, 以至於競爭對手們正在努力保持相關, 即使他們在某些方面客觀地 ' 更好 '。
友浩達微服務能力中台基於騰訊雲容器服務TKE 領先的 Docker容器技術和.NET Core 微服務架構方案,以及 AI 引擎和大數據服務能力,為企業提供了大型應用微服務化運維和管理能力、容器集群管理、容器部署、服務運維、持續集成、持續部署、租戶隔離、微服務治理、APM 性能管理、AI 模型服務等功能。
1、使用TKE 搭建的統一容器 PaaS 平台,將軟件從底層硬件中解耦,提供更好的可移植性和速度,打造輕量、快速、高效、友好的服務運行及開發環境,極大的降低了運維成本;
2、開發微服務架構應用,實現多個微服務組件可以獨立部署,通過統一通信協議互相連接,保證獨立性和高可用性,同時簡化了部署、監控、運維、治理與微服務應用生命周期的管理;
3、使用微軟先進成熟的Azure DevOps 產品,重新規划設計開發測試運維的工作流程,優化開發測試標准的同時將日常繁瑣的重復性工作交由平台來自動化完成,包括源代碼管理、自動化構建、自動化測試、持續集成、持續部署等,顯著的提高了應用系統的開發迭代效率;
4、基於 Kubernetes 核心支撐能力,實現對於應用服務的灰度發布、滾動升級、彈性伸縮、故障自愈、配置管理、服務高可用等多種治理手段,提供了統一的企業IT管理平台,提高了企業IT管理效率;
5、基於.NET Core的高效率開發微服務,高性能運行的微服務系統開發
技術中台架構以K8S+Docker容器化技術為基礎構建運行支撐平台,基於容器化技術的靈活伸縮能力數據集成、服務集成、數據利用、公共服務、DevOps,形成企業級的技術中台。總體架構圖如下:
服務網關是所有應用系統對外訪問的流量入口,能夠實現各個應用的訪問,以及應用之間的相互訪問能力,並且整體提升訪問的安全性,總體訪問過程如下圖:
為什么選擇.NET Core
說到技術棧,腦海中是不是浮現的是這樣一幅圖?
有點眼暈,以下只是我們會用到的一些語言的合集,而且只是語言層面的一部分,就整個技術棧來說,這只是一個開始,從語言開始,還有很多很多的內容。
整個技術棧我的理解包括 4 個層面的內容:
-
語言: 用了哪些開發語言,如:C++/C#/Java/Go/PHP/Python等等;
-
組件:用了哪些組件,如:消息隊列組件,數據庫組件等等;
-
流程:怎樣的流程和規范,如:開發流程,項目流程,發布流程,監控告警流程,代碼規范等等;
-
系統:系統化建設,上面的流程需要有系統來保證,如:規范發布流程的發布系統,代碼管理系統等等;
在創業公司,沒有大公司那些完善的基礎設施,需要我們從開源社區,從雲服務商甚至有些需要自己去組合,去拼裝,去開發一個適合自己的組件或系統以達成我們的目標。
選擇合適的語言
-
選擇團隊熟悉的/能掌控的,創業公司人少事多,無太多冗余讓研發團隊熟悉新的語言,能快速上手,能快速出活,出了問題能快速解決的問題的語言才是好的選擇。
-
選擇更現代一些的,這里的現代是指語言本身已經完成一些之前需要特殊處理的特性,比如內存管理,線程等等。
-
選擇開源輪子多的或者社區活躍度高的,這個原則是為了保證在開發過程中減少投入,有穩定可靠的輪子可以使用,遇到問題可以在網上快速搜索到答案。
-
選擇好招人的 一門合適的語言會讓創業團隊減少招聘的成本,快速招到合適的人。
-
選擇能讓人有興趣的 與上面一點相關,讓人感興趣,在后面留人時有用。
選擇合適的組件和雲服務商
-
選擇靠譜的雲服務商;
-
選擇雲服務商的組件;
-
選擇成熟的開源組件,而不是最新出的組件;
-
選擇采用在一線互聯網公司落地並且開源的,且在社區內形成良好口碑的產品;
-
開源社區活躍度;
選擇了雲服務商以后,就會有很多的產品你可以選擇了,比較存儲,隊列這些都會有現成的產品,這個時候就糾結了,是用呢?還是自己在雲主機上搭呢?在這里我的建議是前期先用雲服務商的,大了后再自己搞,這樣會少掉很多運維的事情,但是這里要多了解一下雲服務商的組件特性以及一些坑,比如他們內網會經常斷開,他們升級也會閃斷,所以在業務側要做好容錯和規避。
關於開源組件,盡可能選擇成熟的,成熟的組件經歷了時間的考驗,基本不會出大的問題,並且有成套的配套工具,出了問題在網上也可以很快的找到答案,你所遇到的坑基本上都有人踩過了。
. Net 基金會是我們圍繞. net 生態系統進行開放式開發和協作的重心。. Net 基金會在其管理下擁有50多個項目和數百個回購項目。開源軟件基金會提供保護、支持、服務和最佳實踐, 幫助每個項目取得成功, 並發展人和軟件的生態系統。微軟開源.NET 和Kubernetes項目的運作方式類似,也是成立了.NET基金會,避免.NET鎖定微軟。
Linux 基金會執行董事 jim Zemlin 說, "有10個開源項目, 投資於具有可持續生態系統的項目"。. Net 是其中之一。CNCF 跟蹤前30名最高成長速度的開源項目。在 X 軸上是提交的 oss 項目速度和 y 軸上的 PR 和問題, # 由圓的大小表示。右上角越遠, 項目的活動就越多。Linux 內核 #1, 其次是Chromium、Kubernetes 和微軟文檔。 . net 是 #1 應用程序框架。
2001年12月-2002年2月。
一個新的平台誕生了。與惠普、英特爾和其他公司一起, 創建了 ECMA-335 標准, 該標准定義了支持多種編程語言的公共語言基礎結構,C# 和 Visual Basic. Net。 F # 於2007年晚些時候發布, 但今天還有20多種. net 語言。Visual Studio. net 已發布, 並將 c#、VB、C++ 開發都包含在一個框中。這是第一個真正跨多種語言集成的 IDE。
Mono項目開始。CLI 規范使其他人能夠創建自己的. net 實現。盡管 Microsoft僅為適用於 windows 構建了第一個. net 框架, 但該規范有意地可跨操作系統和芯片組移植。Mono 項目開始由 Miguel de Icaza 牽頭, 目標是在 Linux 和類似 unix 的平台上實現 Microsoft 新的. net 開發平台。后來,由 Miguel de Icaza創辦了 Xamarin, 專注於跨平台、本地、移動開發, 並在 Mono 的基礎上構建。這允許開發人員使用 c# 和. net 為 iOS 和 Android 構建應用程序。Unity游戲開發也從Mono 中出現。
2008年
asp. net MVC web 開發堆棧作為開源發布到 CodePlex。這是微軟第一個作為開源發布的應用程序開發框架。但是, 基礎運行時和編譯器仍處於封閉狀態。
2014年。
天方夜譚的事情真的發生了。2014年初在微軟的 BUILD 會議上, C# 之父 Anders Heillsberg 在舞台上宣布了. net 編譯器平台 “Roslyn” 的開源。11月下旬,. net Core 項目開始啟動,對外公開。技術世界感到震驚, . net 社區感到興奮。. Net Core 是一個新的雲原生實現. net, 適用於跨平台、超大規模服務以及小型物聯網設備。它的目的是將. net 引入未來15年的計算。而社區也一直給予極大的支持.....。
2016年。
Mono 回家了。2016年初, 微軟終於收購了 Xamarin, 並將 Miguel de Icaza 引入開發者部門。Mono 加入. net 基金會, 並得到 Microsoft 的正式支持和貢獻。微軟社區正式與 Mono 社區匯合。
2017年。
. Net Core 2.0 發布。我們的跨平台和開源實現. net 終於通過跨多個操作系統和編輯器的統一工具支持向世界發布。
2018年。
Winform 和 WPF 宣布開源。在 Microsoft Connect 2018 中, 微軟宣布了 Windows forms和 WPF 桌面框架的開源。此后, 我們看到了不可思議的貢獻和活動。社區現在有能力指導這些框架的方向。
2019年
. Net Core 3.0 發布。. Net Core 3.0 將 Windows 桌面工作負載帶到. net Core 運行時, 這將允許自包含 exe、並行安裝和更快的性能。Build 2019宣布 .NET Core 3.0 之后的下一個版本將是 .NET 5 。這將是 .NET 系列的下一個重要版本。將來只會有一個 .NET ,您將能夠使用它來開發 Windows,Linux,macOS,iOS,Android,tvOS,watchOS 和 WebAssembly 等等。我們將在 .NET 5 中引入新的 .NET API、運行時功能和語言功能。從 .NET Core 項目開始,我們已經向平台添加了大約五萬個 .NET Framework API。 .NET Core 3.0 彌補了 .NET Framework 4.8 的大部分剩余功能差距,支持 Windows Forms,WPF 和Entity Framework 6。 .NET 5 構建於此工作之上,利用 .NET Core 和 Mono 的最佳功能創建一個平台,您可以用於所有現代 .NET 代碼。
2020年
將在2020 年 11 月發布 .NET 5,並在 2020 年上半年推出第一個預覽版。將在 Visual Studio 2019、Visual Studio for Mac 和 Visual Studio Code 的未來更新中支持它。
微軟對該平台進行了大量投資, 特別是在性能方面。 流行的 TechEmpower 基准將 web 應用程序框架與 JSON 序列化、數據庫訪問和服務器端模板呈現等任務進行比較-. net 的性能比任何其他流行框架都要快。
您可以使用. net 構建任何內容。 多年來, 微軟在. net 方面進行了大量投資, 並統一了生態系統, 以支持構建任何東西。從桌面到游戲再到雲,. net 是一個通用的編程平台, 支持各種方案。一旦你學會了一個, 你就可以很容易地拿起另一個。此外, 您還可以使用自己喜愛的工具和編輯器構建. net 應用程序, 或使用 mac 的 Visual Studio、Visual Studio code 或 Visual Studio。