Nginx 是一個非同步框架的網頁伺服器,可以做到
1. http catch
2. 負載平衡
3. 反向代理
https://www.explainthis.io/zh-hant/swe/why-nginx
Nginx 是一個非同步框架的網頁伺服器,可以做到
1. http catch
2. 負載平衡
3. 反向代理
https://www.explainthis.io/zh-hant/swe/why-nginx
Tool: https://reqbin.com/post-online
是一種風格,他描述了如何實現 Web API 的架構,基於 HTTP 協定,用來建立分散式系統,並支援多種程式語言,他的優點包含:
可擴展性:由於系統無需保留 Client 狀態,因此可以提高擴展效能。
靈活性:由於 Client 與 Server 完全分離,因此分層的應用程式功能可以提供靈活性。
獨立性:可以使用各種程式語言來編寫程式,不影響 API 的設計。
可以快取 Cacheable
Reference:
https://ithelp.ithome.com.tw/users/20130079/ironman/4342
https://javascript.info/fetch-crossorigin
https://developer.mozilla.org/zh-TW/docs/Web/HTTP/CORS
https://www.shubo.io/what-is-cors/
https://pjchender.dev/webdev/web-cors/
https://miahsuwork.medium.com/%E7%AC%AC%E5%85%AD%E9%80%B1-api-%E5%9F%BA%E7%A4%8E-json-restful-curl-%E6%8C%87%E4%BB%A4-28670813764e
https://blog.huli.tw/2021/02/19/cors-guide-1/
https://ithelp.ithome.com.tw/articles/10267360
負載均衡是企業應用基礎架構中的最重要的一部分。選擇合適的負載均衡可以提高應用可用性,安全性,性能等眾多好處。
現代化的軟件是負載均衡已經可以幫助我們支持基於DNS,HTTP/HTTPs,VIP(虛擬IP)等多種策略的負載均衡。而且強大的負載均衡還可以幫助我們實現網站訪問加速,TLS offload,cache,DDOS 等眾多高階功能。使我們後台的程序變的更加易於實現和管理
load balance 主要組成:
規測演算法
hartbeat
分為硬體和軟體:
硬體:F5
軟體:HAProxy、Nginx、LVS
分為三大類:
DNS Load Balancer (DLB)
Application Load Balancer (ALB)
1. Nginx
2. HAProxy
Network Load Balancer (NLB)
DNS Load Balancer (DLB):第一層用於平衡不同的區域請求數量
將 request 分發到不同的 ip
Application Load Balancer (ALB):針對用於 http或 https請求一種負載平衡
client -> http/https
透過 TLS termination proxy 解決
client -> encrypted -> ALB (證書管理) -> unencrypted -> App1
/image -> App1 server
.user-> App2 server
Network Load Balancer (NLB)
使用時機:性能要求較高的服務應用
優點:性能比較好
缺點。路由轉發路徑不靈活 (ip' port)
Reference
建立個人專屬的Docker image
依 V8 images 為基準,新增 1 個 REPOSITORY
Step1: 查詢自己的UID,因為Docker啟動後,需要存取你在系統的檔案資料,所以需要同步UID
#id johnnysu
uid=1002(johnnysu) gid=1002(johnnysu) groups=1002(johnnysu),133(docker)
Step2: 確認系統中,是否有docker image?
#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nvt_env v8 0b4f165032d4 4 days ago 8.56GB
...
Step3: 啟動Docker容器
#docker run -it --name nvtenv_johnnysu_v8 nvt_env:v8 /bin/bash
Step4: 在Docker容器內,新增使用者 (輸入跟本機相同帳號密碼)
#adduser johnnysu
Step5: 修改UID/GID,及 sudo,與本機相同
usermod -u 1002 johnnysu
groupmod -g 1002 johnnysu
sudo usermod -aG sudo johnnysu
Step6: 修改完成後,再透過id command確認,確認後,執行exit離開docker。
Step7:儲存該階段docker容器
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a953d7b4cb02 nvt_env:v8 "/bin/bash" 10 minutes ago Exited (0) 10 minutes ago nvtenv_johnnysu_v8
...
>>> 將這個docker打一個新的tag <<<
USERNAME@TPVPC:~$ docker commit -m "commit message” CONTAINER_ID IMAGE:new_tag
ex. docker commit -m "set johnnysu has the sudo privileges" a953d7b4cb02 nvt_env:v8
Step8: check Docker image
#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nvt_env johnnysu_v8 60b12cdc221c 10 minutes ago 8.56GB
Step 9: 使用 docker image
docker run -it -u johnnysu \
--privileged \
-v /extspace/ktm_proj/ref_ktmoss:/ktmoss \
-v /usr/bin/hexdump:/usr/bin/hexdump:ro \
-v /etc/localtime:/etc/localtime:ro \
-v /home2/johnnysu:/home2/johnnysu \
-v /extspace/johnnysu:/extspace/johnnysu \
-v /extspace/ktm_proj/gitmirror:/extspace/ktm_proj/gitmirror \
--name nvtenv_johnnysu_2k24_v8 \
-it nvt_env:johnnysu_v8 \
/bin/bash
Step 10: docker容器
#docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd9379e13420 nvt_env:johnnysu_v8 "/bin/bash" 26 seconds ago Exited (0) 7 seconds ago nvtenv_johnnysu_2k24_v8
a953d7b4cb02 nvt_env:v8 "/bin/bash" 20 minutes ago Exited (0) 19 minutes ago nvtenv_johnnysu_v8
Step 11: 移除不要的 docker容器
#docker container rm a953d7b4cb02
Step 12: 使用 docker 容器
#docker start bd9379e13420
#docker attach bd9379e13420
什麼是服務發現
當你在瀏覽器輸入 domain name,獲取網站服務的流程。
這流程中,DNS 會根據域名解析出 1 個 ip 位址,返回ip地址中對應鏈接包含的內容。我們根據特定的標誌(域名)來獲取我們所需要的服務,這就是服務發現。
而在微服務的領域,我們將應用拆分成一個個的微服務之後,服務發現,則變成了微服務之間相互獲取彼此的信息。
在微服務的場景下,使用DNS服務器作為服務發現的實現者會存在以下幾個問題
1. DNS服務器不支持動態變更,不能夠隨著服務的狀態變更(上線、下線、故障)而對域名映射變更
2. DNS只能支持域名和ip地址的一一映射,但在微服務的場景中,很多微服務都會部署多個實例,這也就要求標誌與服務要有一對多的映射
3. DNS服務無法解決多數據中心的問題
服務發現模式
服務發現主要存在有兩種模式,客戶端模式與服務端模式,兩者的本質區別在於,客戶端是否保存服務列表信息
https://blog.csdn.net/u013035373/article/details/79414529
目前成熟的服務發現應用
Reference:
https://blog.csdn.net/Mr_SeaTurtle_/article/details/77618403?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-77618403-blog-112297667.235^v38^pc_relevant_sort_base2&spm=1001.2101.3001.4242.3&utm_relevant_index=7
BFF 只是一种逻辑分层
BFF 解决了什么问题
同时为了保障 Android,iOS,以及 Web 端的不同需求,需要为不同的平台写不同的 API 接口,而每当值发生一些变化时,需要 Android,iOS,Web 做出修改。与此同时,当我们需要对一个字符串进行处理,如限定 140 个字符的时候,我们需要在每一个客户端(Android,iOS,Web)分别实现一遍,这样的代价显然相当大
【n8n免費本地端部署】Windows版|程式安裝x指令大補帖 【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能