Saturday, August 12, 2023

[Web] load balance

負載均衡是企業應用基礎架構中的最重要的一部分。選擇合適的負載均衡可以提高應用可用性,安全性,性能等眾多好處。

現代化的軟件是負載均衡已經可以幫助我們支持基於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

硬核讲解负载均衡以及全局负载均衡的设计

跨區域 (全域) Load Balancer





Monday, July 3, 2023

[docker]建立個人專屬的Docker image

 建立個人專屬的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

Sunday, June 25, 2023

服務發現

什麼是服務發現

當你在瀏覽器輸入 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 只是一种逻辑分层

BFF 解决了什么问题

    同时为了保障 Android,iOS,以及 Web 端的不同需求,需要为不同的平台写不同的 API 接口,而每当值发生一些变化时,需要 Android,iOS,Web 做出修改。与此同时,当我们需要对一个字符串进行处理,如限定 140 个字符的时候,我们需要在每一个客户端(Android,iOS,Web)分别实现一遍,这样的代价显然相当大



而当我们有了 BFF 这一层时,我们就不需要考虑系统后端的迁移。后端发生的变化都可以在BFF 层做一些响应的修改。

例如,我们加入 BFF 层,原本每次访问发送 3 请求页面,变成一个请求。


Components of an event-driven BFF on AWS

From: https://aws.amazon.com/tw/blogs/mobile/backends-for-frontends-pattern/


Friday, June 23, 2023

微服務

五個系統設計常用的定律

* 墨菲定律 Murphy’s law
只要有可能出錯,就一定會出錯
* 高德納定律 Knuth’s law
在時機未到前優化是萬惡之源
* 諾斯定律 North’s law
每一個決定都是一次取捨
* 康威定律 Conway’s law
組織本身的溝通結構會反映在該組織所設計的系統上
* 帕金森瑣事定律 Parkinson’s law of triviality
組織成員會投入不成比例的心力在瑣事上


Microservices 是近幾年來軟體工程領域裡滿常聽到的熱門關鍵字之一。大概是在 SOA 出現後幾年開始崛起,跟 SOA 其實有 87% 像,所以最一開始 microservices 出現的時候,都還是被與 SOA 一同稱呼。兩者想要做的都是將一個單體式架構(Monolithic Architecture)依照功能拆成小塊,達到更好的可重用性(reusability)與靈活度(flexibility)。

Reference: https://ithelp.ithome.com.tw/articles/10228461

後端工程面試詳解-導覽

Catch Server

JWT

微服務特點:

1. 一組小的服務

2. 獨立的 process

3. 輕量級通信 (SOA 重量級才務)

4. 基於業務能力 (登錄服務、商品服務)

5. 獨立部署

6. 無集中式管理


定義:

Loosely Coupled

Service Oriented Architecture

with bounded context (獨立的數據)


優點:

1. 強模塊化邊界

2. 可獨立部署

3. 技術多樣性 (Java, NodeJs)

缺點:

1. 分佈式復雜性

2. 最終一致性問題 (資料庫)

3. 運維複雜性 (監控容量規劃、可靠性、穩定性)

4. 測試復雜性 (分散各個團隊)




微服务架构介绍

https://www.cnblogs.com/javastack/p/14925269.html

微服務架構 導入經驗分享

https://www.slideshare.net/chickenwu/community-open-camp

微服务架构图

https://www.cnblogs.com/yaoyangding/p/17461767.html

微服務架構 - 從狀態圖來驅動 API 的設計

https://columns.chicken-house.net/2022/03/25/microservices15-api-design/

RESTful API Design

CORS Introduction




康威法測是微服務的基礎

將單塊應用拆分成多微服,每個團隊維護自己的服務,相互之間不干擾

從單體架構遷移到微服務

https://blog.csdn.net/xtayfjpk/article/details/123181575

https://mp.weixin.qq.com/s/VeeLTGVSUvgtil19rRhOPg


什麼樣的情況下適合使用 Microservices

Reference: https://ithelp.ithome.com.tw/articles/10228461


什麼樣的組織架構更適合微服務

團隊負責:Architect -> Design -> Develop -> Review -> Test -> Deploy -> Run -> Support -> Architect 


Iaas、Pass、Saas 傻傻分不清楚


分層方式:

外部設備

load balance

Backend for Frontend (BFF) 聚合服務 (適合服務、邊界服務)

基礎服務 (核心領域服務、公共服務、中間層服務)

服務發現



continue
 
https://ost.51cto.com/posts/14840

API Gateway 


第01讲:什么是微服务架构?

第02讲:架构师如何权衡微服务的利弊?

第03讲:康威法则和微服务给架构师怎样的启示?

第04讲:企业应该在什么时候开始考虑引入微服务?

第05讲:什么样的组织架构更适合微服务?

第06讲:如何理解阿里巴巴提出的微服务中台战略?

第07讲:如何给出一个清晰简洁的服务分层方式?

第08讲:微服务总体技术架构体系是怎样设计的?

第09讲:微服务最经典的三种服务发现机制


Sunday, June 18, 2023

交易型系統設計的一些原則

高并發原則

1. 無狀態- 設計應用屬於無狀態,可以水平擴展

2. 拆分

2.1 系統

2.2 功能

2.3 讀寫

2.4 AOP:CDN 就是一個 AOP 系統

2.5 模塊

3. 服務化

    微服務了解 Dubbo 核心概念和架构   入門到實戰


n8n index

 【n8n免費本地端部署】Windows版|程式安裝x指令大補帖  【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能