Web-Business-Application-Solution

項目地址 :  https://github.com/kelin-xycs/Web-Business-Application-Solutionphp

Web-Business-Application-Solution

你們好,這個項目的目的,是 爲 企業應用 + 互聯網商業應用 提供一個 開源 解決方案。html

這個項目 設計 爲 組件 方式。不搞大包大攬。按需引用 須要的模塊 就行,就像組件同樣。^ ^ 這樣避免了 侵入性,鐵板一塊,難理解,難維護。git

企業應用 + 互聯網商業應用,要 解決 的 第一個問題是 Web 大規模 使用。github

我簡單的畫了個 架構圖:docker

我原本畫了一個架構圖的,可是又不知道怎麼把圖片貼進來,因此就文字描述一下了。以下:數據庫

架構小程序

  Webc#

  緩存後端

  數據庫centos

這個架構裏只有 水平伸縮。這樣比較簡單。當 訪問量 增大時,水平擴展 Web層,緩存層 就行。 數據庫的話,如今 分佈式數據庫 用的還不廣泛。對於 單主機 的 數據庫,擴展CPU 核心數,內存;使用SSD硬盤就行。 好比 SqlServer 2017,配置了 足夠的 CPU 核心數,內存,SSD,在 大數據量 高併發 時 的 表現很好。

緩存層 的 使用方法,可謂 各家各派,各類方法方式。^ ^ 個人想法比較簡單,就是 避免頻繁的對數據庫的讀寫。 具體的說,就是,在進行 業務運算和處理 時,把數據從數據庫讀取到 緩存,而後 運算處理。運算處理完成後,再把結果批量更新回數據庫。運算過程當中,對於數據的讀寫都是在緩存進行。 這樣能夠解決數據庫成爲瓶頸的問題。

這個架構,我把它叫作「3.5層架構」。由於 緩存層 算 0.5層 嘛。 ^ ^

上面是 架構。

下面咱們說說 部署。咱們但願作出一套 虛擬機(雲服務器) + 容器編排 + 負載均衡 + Redis 來構建 Web 集羣 的 解決方案。 有個網友提供了一套方案,能夠參考: centos 下docker 一鍵部署php和tomcat環境 https://github.com/kingkoo1985/docker_lnmtp

接下來是 運維。根據 DevOps 的 理論,我再發展一下,就是: 開發 = 運維 。你們都是 開發人員,只不過這段時間我作 開發,你作 運維;下個月 我作 運維,你作 開發。 對不對? ^ ^  這樣就好玩了。

這套解決方案的 關鍵詞 是 架構 部署 運維。

其實我不太贊同 微服務。但 SOA 卻是可能成爲 趨勢。由於 平臺 與 平臺 之間的 交互 應該會是一個 趨勢。 微服務 的 第一個 課題 就是 實現 數據一致性。SOA 也須要 解決 這個問題。 但實際上,數據不一致 並不可怕,關鍵在於 清晰的 記錄Log,及 提示出來, 讓 用戶 和 各方 可以清楚的看到 這一筆交易 是 失敗 的,問題出在了哪裏,接下來要怎麼處理。 咱們爲此提供了一個 組件 SOALog。 SOALog 的功能就是 記錄 Log 到 數據庫 裏。 見  https://github.com/kelin-xycs/SOALog 。 因此,在 調用服務失敗 的時候,能夠用 SOALog 記錄 Log 到 數據庫 裏。 Log 記錄到 數據庫 的 優勢 是 便於 查詢 分析,還能夠用 報表 呈現出來。 報表 也能夠呈現給 用戶和相關各方 看,做爲問題處理追蹤 的 一個 報表。 總的來講,這是一種 鬆耦合 樂觀 的 數據一致性 解決方案。

在 服務 調用中,會 涉及 「熔斷」 「重試」 等概念。我寫了一個 熔斷 重試 的 例子,見  https://github.com/kelin-xycs/FusingAndReTrySample

這裏想表達的一些理念是:

少搞一點 封裝, 少搞一點 控制反轉(Ioc), 少搞一點 AOP, 少搞一些 「聲明式」。

不要隱藏太多代碼,讓 代碼 迴歸 代碼。

是 找回 80 年代 寫 Basic 的 那種感受 的 時候了。 ^ ^

負載均衡 方面,公有云可使用 雲 提供的 負載均衡 服務,好比 阿里雲 的 彈性計算 負載均衡。 企業內部私有云,可使用 Nginx。Nginx 是一個 反向代理服務器。能夠實現 基於 Http 轉發 的 負載均衡。 是一個 使用普遍,高效,穩定 的 負載均衡 服務器。 聽說 使用 Nginx 能夠 支持 每分鐘 1 萬筆 的 交易量。固然,也可能更多。 ^ ^

盒子科技劉恆:聚合支付系統演講
https://mp.weixin.qq.com/s?__biz=MzI3MzEzMDI1OQ==&mid=2651820556&idx=1&sn=31d7e9e786900dd7c2826e5789b369ee&chksm=f0dcc470c7ab4d66ba3f25f8dbdc52d343f746670a1932b4645f59c5248de593e3510168ef16&mpshare=1&scene=1&srcid=0525gGj2hr3MGMzcVHFO4X77&pass_ticket=E9nUT%2BrfK4Ex1y5eEmKzEc1DgUpiL9DiF%2FUb4PrrmEJy8KKXtD2rQl5p7mepKihX#rd

參考上文。 我以爲,咱們能夠用手頭的一些技術,來 搭建 可靠的 「高併發 分佈式 業務系統」 架構。 用於 企業應用 + 互聯網應用。 手頭 的 技術, 包括 RPC MQ 緩存(Redis) 網關。 能夠 經過 集羣 (負載均衡) 來 實現 水平伸縮, 以 知足 吞吐量 的 需求。 同步 服務 使用 RPC, 異步 服務 使用 MQ。
這個 架構 到 目前爲止 看起來 很美好, 但 有一個 技術 難點 或者說 重點 是 熱擴展。 實際上, 應用層 很 容易 實現 熱擴展。 好比 , Http 可使用 Nginx, MQ 可使用 RabbitMQ 集羣, 緩存 可使用 Redis 集羣。 而 網絡層 的 熱擴展 則 須要 一些 底層 的 技術 ,,或者說 專業 的 產品。 好比 F5 HAProxy LVS , 或者 阿里雲 彈性計算。 不過 剛剛 看了一下資料, Nginx 也 支持 http tcp udp 的 負載均衡 了。 熱擴展 的 問題 解決 了, 基本上 就 沒什麼 問題 了。 接下來 就是 整個架構 運做 流程 的 監控, 用 上文 《聚合支付系統演講》 裏 文章 最後的話說, 就是 「全鏈路監控」。 這個 部分 說白了 其實 就是 記錄 Log 到 數據庫,用 NLog 能夠 實現。 如今有一款 性能監控 工具 Apache Sky Walking, 聽說 「開箱即用」, 提供了 儀表盤,各類報表, 能夠 來 分析 和 呈現 Log, 也就是 整個 系統 運做流程 監控。 要 使用 Apache Sky Walk 可能 要 實現 它 的 「探針」, 或者 使用 它 現成 的 「探針」,,,這跟 NLog 原理上 也是同樣的。

O 了。

其實 我 還有 一套 架構, 叫作 「 1 Binary 」 架構。 1 Binary 開箱即用。

怎麼實現 擴展 呢 ? n Deploy

合起來 就是 1 Binary + n Deploy 。

頂多 再 加 一個 緩存層,

O 了 。

關於 ORM 和 數據操做, 我 比較 喜歡 一個 超輕量 的 Entity 庫(Active Record) + Sql 查詢 DataTable 。

一個 超輕量 的 Entity 庫, 只須要 實現 將 單筆資料 映射 到 Entity 對象, 並 實現 單筆資料 的 增刪改查 就行。 Sql 查詢 DataTable 的 方式 會 很 靈活 高效, 直觀, 簡單明瞭。 ORM 的 緩存, 在 集羣(負載均衡) 的 狀況 下, 會 有點 雞肋, 由於 服務器 的 緩存 之間 不能 達到 數據一致。 因此,在 集羣(負載均衡) 的 狀況 下, 緩存 一般 會採用 分佈式緩存,如 Redis。 LinQ 的 數據查詢篩選 功能, 能夠說是 好東東, 在 業務邏輯 裏, 有時候 須要對 少許資料 做 distinct group by order by sum 等 時, 會 很方便, 本身 寫 循環 會 比較 麻煩。 但 LinQ 對於 2 個 超過 1000筆 資料 的 集合 join 時, 性能 會 變慢, 由於 LinQ 沒有 索引 的 觀念。 因此,對於 資料量 比較 大的 join, 或者說 廣義 的 數據關係運算 ,, 交給 數據庫 來 完成, 會比較好。 由於 這是 數據庫 的 專業。 如今 硬盤 都是 SSD , 不用 怕 傷 硬盤 嘛 。 ^^
在 索引 和 臨時索引 的 機制 下, 數據庫 能夠 輕鬆 的 完成 數據 查詢 任務。 實際上, 真正 形成 數據庫 負擔 和 瓶頸 的, 是 大數據量 表 頻繁 Insert 索引排序 。
排序 會 形成 很大 的 時間複雜度。 在 SSD 硬盤 普及 的 今天, 查詢 是 健康操做。 說到這裏, 我 產生 了 一個 小想法, 我 打算 寫一個 對 DataTable 使用 Sql 來 進行 數據 查詢 的 小 庫 。 主要 是 支持 distinct goup by order by sum 。 還有 就是 上面說的 一個超輕量 的 Entity 庫。

解決方案組件 和 參考資料 以下:

解決方案組件:

WebApiClient ,一款基於HttpClient封裝,只須要定義c#接口並修飾相關特性,便可異步調用遠程http接口的客戶端庫

https://github.com/dotnetcore/WebApiClient

MultiThreadFileScanner,一個 多線程 檢索 文件內容 的 小程序 

https://github.com/kelin-xycs/MultiThreadFileScanner

SOALog,爲 SOA 架構 提供一種 鬆耦合 樂觀 的 數據一致性 解決方案,說白了這個組件的功能就是 記錄 Log 到 數據庫 裏,詳細介紹 見 上文。 

https://github.com/kelin-xycs/SOALoghttps://github.com/kelin-xycs/SOALog

FusingAndReTrySample, 熔斷 重試 的 例子。 

https://github.com/kelin-xycs/FusingAndReTrySample

阿里雲彈性計算 

https://www.aliyun.com/?utm_medium=text&utm_source=bdbrand&utm_campaign=bdbrand&utm_content=se_32492

centos 下docker 一鍵部署php和tomcat環境 

https://github.com/kingkoo1985/docker_lnmtp

參考資料:

《後端架構師技術圖譜》 

https://github.com/xingshaocheng/architect-awesome

日訪問量百億級的應用如何作緩存架構設計 

https://mp.weixin.qq.com/s?__biz=MzI3MzEzMDI1OQ==&mid=2651820285&idx=1&sn=b5f9fcb6ec6838afd5428070a1d81707&chksm=f0dcc681c7ab4f9734dc2b6a015c2508983df34cc004cd7be5a8269284bed5a444e68cbef896&mpshare=1&scene=1&srcid=0507vgwEC6jt4bKXLkrtXM5G&pass_ticket=XkwMJABPdvsBn%2F6Dky%2BMLVyhCKt55wJ1twxtjGvQgYWJEmAjjrE%2BdtRHT5jkaxtW#rd

DevOps老司機如何兼顧運維與開發?(附腦圖) 

https://mp.weixin.qq.com/s?__biz=MzI3MzEzMDI1OQ==&mid=2651820291&idx=1&sn=a704126dfee9762d74e1c30e3464f439&chksm=f0dcc77fc7ab4e690fb8310ab8ee1eb6624686e62f70a61a7149d299d9a6f01822ca9017953e&mpshare=1&scene=1&srcid=0508rgQzU5eAd11ccS8zL0Af&pass_ticket=XkwMJABPdvsBn%2F6Dky%2BMLVyhCKt55wJ1twxtjGvQgYWJEmAjjrE%2BdtRHT5jkaxtW#rd

螞蟻金服CTO程立:金融級分佈式交易的技術路徑 

https://mp.weixin.qq.com/s?__biz=MzI3MzEzMDI1OQ==&mid=2651820298&idx=1&sn=e01179f16295ac1fddc3c33696845fe4&chksm=f0dcc776c7ab4e604e1d7d3171708a40331e1e0dce100579026df9b4365be1f7af0e37da5e0a&mpshare=1&scene=1&srcid=0509JF8HPfpgyAQL3orPFGXq&pass_ticket=XkwMJABPdvsBn%2F6Dky%2BMLVyhCKt55wJ1twxtjGvQgYWJEmAjjrE%2BdtRHT5jkaxtW#rd

Oracle, Red Hat等大廠近期密集發佈,增強支持Kubernetes 

https://mp.weixin.qq.com/s?__biz=MzIzNjUxMzk2NQ==&mid=2247489297&idx=1&sn=ddcd1d728a7aa130e9ae950a12a17d64&chksm=e8d7e8d3dfa061c5c84f144005ea54d6ce03a73a48cd180af35bf9294615f5e01187cf0e2fc1&mpshare=1&scene=1&srcid=0507k5qY4RlrzKFodWKULXVl&pass_ticket=XkwMJABPdvsBn%2F6Dky%2BMLVyhCKt55wJ1twxtjGvQgYWJEmAjjrE%2BdtRHT5jkaxtW#rd

Netty——基本使用介紹 

http://www.javashuo.com/article/p-zdquyrbj-ka.html

小白科普:Netty有什麼用? 

http://www.javashuo.com/article/p-dadjaojn-hv.html

Cef ,CEF:給客戶端內嵌一個Chrome吧 

https://www.itsvse.com/thread-4102-1-1.html

Polly.net 待更新

log4net Nlog 

http://www.javashuo.com/article/p-fcrbgana-mk.html https://blog.csdn.net/lx520aa/article/details/77950057http://www.cnblogs.com/Terrylee/archive/2006/12/03/opensource_framework_and_resource_recommendation_Log.html

基於.NET Core 2.0 開發的跨平臺支付SDK集。目前支持:支付寶(Alipay)、微信支付(WeChatPay)、QQ錢包(QPay)、京東支付(JDPay)、連連支付(LianLianPay)、銀聯支付(UnionPay)

https://github.com/Essensoft/Payment

支付寶(Alipay)服務端SDK,採用.NET Standard 2.0,支持.NET Core 2.0,與官方SDK接口徹底相同。徹底能夠按照官方文檔進行開發。除了支持支付之外,官方SDK支持的功能本SDK所有支持,好比生活號、服務窗、行業合做等,且用法幾乎同樣,代碼均可參考官方文檔代碼。

https://github.com/dotnetcore/Alipay.AopSdk.Core

以後會慢慢更新。 ^ ^

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息