前言
書接上文,上文書說到:微服務架構概念、優缺點、劃分原則以及技術選擇,既然指導思想有了,那就用實踐學習來檢驗。
一,網關API
1,何爲網關API?
網關網關API——整個系統的統一入口,往上,接收一切外界請求;往下,通知內部所有服務。簡單來講就是一個“門”。
2,網關API功能作用
(1)身份認證與授權
這“家”裏窮不窮富不富的先不說,有門了就不能隨便讓人進,這要來壞人那就得出事,所以得給門加個鎖,有鑰匙(token)的您裏面請,沒鑰匙的........
當然了進來了也讓人隨便跑,這“二奶奶”能不能去“大奶奶”的房還得看老爺的意思,爲了家裏和諧還是各自回廂房歇着。
身份認證與授權:保證系統安全訪問
(2)負載均衡
老爺家挺大的,一到過年過節家裏客人也多;家裏大少爺飽讀詩書又有功名在身,平時喜好交朋友;老爺甚是喜歡老早就把東西廂房給了他;
看門的一聽是找大少爺的,不是讓去東廂房就是讓去西廂房,把這人情事故處理的妥妥當當的。
(3)訪問限流
看門的這來的人太多把門都快擠壞了,趕緊把情況報告給老爺,老爺一方面怕大少爺會客累壞身子,另一方面怕門出問題這都是事;
“今日各位朋友遠道而來,令寒舍蓬蓽生輝倍感榮幸,大家的熱情鄙人和犬子都感受到,奈何這家小門小實在照顧不周,眼看天色也不早了,、
還請離家近的朋友把機會留給遠方的朋友,遠方的朋友也請你們排排隊 這樣也能快一點把事辦了”老爺說完一拱手就見門口的情況好了很多,轉身就回屋了。
......東街李員外意外路過看了十分眼紅,心裏暗下決定趕明照着這個給也弄一個。。。
二,Ocelot網關搭建
李員外也是實幹主義的人說幹就幹,上到性能檢查下到實施全部親力親爲,最終綜合考慮就用Ocelot
官網:https://ocelot.readthedocs.io/
1,第一步創建一個.net core web 項目
2.使用 NuGet安裝Ocelot的相關組件
因爲框架使用的是 .net core 3.1 所以只能安裝16.0一下版本,,,
3,修改程序配置
在startup 裏面添加ocelot服務
在Program 裏面添加ocelot配置
ocelot.json:
{
"Routes": [
{
"DownstreamPathTemplate": "/product/{path}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 4001
},
{
"Host": "localhost",
"Port": 4002
}
],
"UpstreamPathTemplate": "/api/product/{path}",
"UpstreamHttpMethod": [
"Get",
"Post"
],
"LoadBalancerOptions": {
"Type": "RoundRobin"
}
},
{
"DownstreamPathTemplate": "/order/{path}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 4050
}
],
"UpstreamPathTemplate": "/api/order/{path}",
"UpstreamHttpMethod": [
"Get",
"Post"
],
"LoadBalancerOptions": {
"Type": "RoundRobin"
}
}
],
"GlobalConfiguration": {
"BaseUrl": "http://localhost:4000"
}
}
參數說明:
DownstreamPathTemplate:下游具體服務地址,{path}佔位變量,"path"可以是其他字符支持自定義
DownstreamScheme:下游請求方案,可以使用:http/https
DownstreamHostAndPorts:下游服務的主機和端口集合,對下游服務的請求進行負載平衡, Ocelot 允許添加多個條目,然後選擇一個負載平衡器
UpstreamPathTemplate:上游路徑地址,上游的路徑無需和下游一致
UpstreamHttpMethod:上游接受請求方式集合:[ "Get", "Post", "Put", "Delete" ]
LoadBalancerOptions:負載均衡平衡器,4個參數可選RoundRobin - 循環訪問,NoLoadBalancer - 從配置或服務發現中獲取第一個可用服務,"LeastConnection" 請求最少的服務發送新請求,
CookieStickySessions - 使用 cookie 將所有請求粘貼到特定服務器
GlobalConfiguration:全局配置,BaseUrlocelot網關運行的地址
其中product 設置使用兩個端4001,4002 模擬負載均衡,按上述簡單配置不出問題運行效果如下:
客戶端對服務的調用使用網關進行統一中轉,簡化客戶端請求配置,服務端也做跨域也方便,避免了服務地址直接暴露
如果ocelot.json 中下游端口等其他的配置經常變化修改對整個系統並不是很友好,所以Ocelot 允許指定服務發現提供者,並將使用它來查找 Ocelot 將請求轉發到的下游服務的主機和端口
下一篇 Ocelot中的服務發現、註冊、健康檢查以及簡單的服務治理
--------to be continue --------