七牛彎區課堂 Ruby服務間通訊模式

2021-09-20 02:47:22 字數 2568 閱讀 6107

ruby是計算機語言中的紳士,如果要用乙個詞來形容,那一定是優雅,有這麼一位rubyist,他的座右銘是「寫優雅的程式,做乙個優雅的人」,他是來自七牛小夥伴「薄荷」的co-founder兼cto謝文威(英文名vincent)。薄荷的核心系統完全基於ruby構建,關於ruby服務間通訊模式,他在「七牛彎區課堂」給ruby愛好者們做了一次分享。

一、a服務需要使用b服務的一些資料 共享資料庫

應用場景:使用者的年齡、性別、身高和體重等資料儲存在賬號子系統中,其它子系統經常需要使用這些資料。

處理方式:共享資料庫

共享資料庫方法:

activerecord支援多資料庫配置有一些注意的事項:

可以使用關聯,不支援join,不支援事務

測試資料最好使用factory_girl

為避免資料混亂,只有乙個服務可寫

共享模型使用

gem model

git submodule

二、a服務需要b服務提供某個計算結果 請求結果(同步)

處理方式:httpapi call和rpc

這是最常見的一種通訊方式,服務實現方案成熟可靠,具有服務邊際簡單清晰的特點,同時適用於外部和內部,但內部呼叫效能不夠好。

使用http api注意事項

訪問安全控制,使用ip限制,token校驗等

避免呼叫層次過深,超時機制

http client選擇(http client特別多,主要分為以下幾類)

薄荷目前typhoeus和faraday用的較多,原因是:typhoeus底層基於curl,效能比較好,並且支援並行,用非同步api的方式,比較可靠,不用擔心多執行緒問題。

主要特點:

長連線,避免每次通訊建立網路連線,效能較好

對http、訊息協議更高效

多種跨語言rpc方案,如thriftmsgpack_rpc

rpc管理

效能上有一定優勢,需要權衡其複雜度,複雜度在於服務實現方案和管理方法。

服務端併發模式

高可用方案,可用haproxy

平滑部署

rpc的用法比較少見,更多地用於跨多語言的團隊,當公司使用多種語言且需要很好地整合時,rpc則是一種比較成熟的方案。

三、a服務需要b服務處理一項任務 請求任務處理(非同步)

應用場景:在購物模組裡面,乙個訂單發生支付後,需要給使用者推送一些資訊,比如發簡訊、郵件和手機推送等。傳送訊息可能需要比較長的時間才能完成,請求方不需要等待處理結果。

處理方式:訊息佇列

1)傳統訊息佇列系統rabbitmq/active mq

mq可以有降低服務之間耦合度,通常用於服務之間的非同步處理(傳統mq有更豐富的處理機制),傳統mq ruby服務實現方案,可以參考sneakers, hutch, rack-ampq, rack-rabbit。

2)在單個應用內部常常使用基於redis的輕量訊息佇列

resque&sidekiq

3)sidekiq-postman

它是vincent寫的乙個gem,基於sidekiq輕量訊息佇列解決方法,簡單實用,可以跨應用請求sidekiq任務處理,以下是其核心**:

四、a服務發生某件事,通知b和c進行處理 訂閱和通知

應用場景:比如賬號基本資訊,基於效能考慮,在子系統中儲存了使用者名稱副本。當使用者名稱在賬戶子系統中發生變化時,需要通知其它子系統更新。

處理方式:訊息佇列

sidekiq-driver 是vincent正在寫的基於sidekiq輕量訂閱和通知解決方法的gem,大家可以盡情期待這個專案的開源。

【七牛彎區課堂】是七牛為廣大開發者提供的技術實踐分享課堂,後續將定期邀請各技術社群的專家進行分享。以上內容即是ruby china社群在「七牛彎區課堂」的**作。歡迎各技術社群的小夥伴來【七牛彎區課堂】分享實踐心得,也感謝各位為技術社群所貢獻的力量。

作業系統課堂筆記七

連續分配方式 1 單一連續分配 記憶體分為系統區和使用者區兩部分 系統區 僅提供給os使用,通常放在記憶體低址部分 使用者區 除系統區以外的全部記憶體空間,提供給使用者使用。最簡單的一種儲存管理方式,只能用於單使用者 單任務的作業系統中。優點 易於管理。缺點 對要求記憶體空間少的程式,造成記憶體浪費...

作業系統課堂筆記(七)

系統區 僅提供給os使用,通常放在記憶體低址部分 使用者區 除系統區以外的全部記憶體空間,提供給使用者使用。把記憶體分為一些大小相等或不等的分割槽 partition 每個應用程序占用乙個分割槽。作業系統占用其中乙個分割槽。提高 支援多個程式併發執行,適用於多道程式系統和分時系統。最早的多道程式儲存...

狗子課堂 七 linux 命令引數

用於在檔案樹中查詢檔案,並作出相應的處理。命令格式 find pathname options print exec ok 命令引數 pathname find命令所查詢的目錄路徑。例如用.來表示當前目錄,用 來表示系統根目錄。print find命令將匹配的檔案輸出到標準輸出。exec find命...