Teams App抽獎機器人 - 基礎架構

今天我們來聊一下,一個Teams app的infrastructure,我在考慮LuckyDraw的主要出于這么幾個出發點:

  • 可管理性。因為這是一個個人產品,以后維護工作也只有我一個人,所以我希望整個infrastructure簡單、易管理,不要太花我時間

  • 高可用。Teams的用戶遍布全世界,所以LuckyDraw的用戶來自不同時區,這個基礎架構要能很好的支持7x24小時高可用

  • 高可擴展。Office365的用戶有1B,所以LuckyDraw的用戶可能會在某個時間點爆發(只是可能)。這個架構需要能快速的擴展成支持上百萬的用戶

  • 低成本。一個字:窮。我窮啊

下面這張圖展示了LuckyDraw整體的基礎架構(構建在Azure上)

highlevel

中間是Azure App Service,運行著Bot,由Bot Service打通我的Bot和Teams之間的通道。數據庫使用的是Table Storage。Key Vault里保存著連接字符串,bot密鑰等等。Log Apps用來出發抽獎(每個抽獎都在某個指定的時間點被觸發),Application Insights用來存儲日志,Availability Test(它實際上屬于Application Insights)用來確保我的LuckyDraw Bot的高可用。

接下來我就一個個具體說一下我為什么要這么設計:

App Service:

選用App Service主要是因為它可以非常方便的向上擴展和水平擴展,而且還支持auto scale,當他檢測到cpu占用與高于某個閾值時,自動水平擴展,這樣我就很容易管理了,不需要擔心機器是否夠用。而且App Service和Azure里的其他資源非常容易整合。最最關鍵的是它有Free版本,雖然free版本有一些限制,但是也足夠用于DEV和UAT環境了。

實際上下個版本,我準備把App Service Plan從Windows換成Linux,這樣我的生產環境可以更加便宜,而且可以看到B1系列的linux還有優惠,便宜到爆

Linux vs. Windows

Table Storage

選用Table Storage主要是因為:便宜!太便宜了,我計算過一次抽獎算他平均5KB的數據,也就是一百萬次抽獎一個月才0.225美金,人民幣按照6.8來算,才1.53元。而且我還可以吧已經結束的抽獎移到Archive Storage,才6分人民幣每個月每一百萬次抽獎。是不是覺得便宜到不可相信的地步?

TableStorage Cost

當然,使用Table Storage也不是沒有缺點的,不然那些SQL老大哥們怎么活啊。使用Table Storage有幾點需要注意:

  • 目前沒有成熟的自帶的備份方案,但可以自己寫腳本實現
  • 每row數據,每個column的數據有大小限制
  • 開發是不能使用EF,Dapper等成熟的ORM庫

Logic Apps

當時為了找一個timer的方案,很是頭痛,我并不希望把我的bot的服務做成stateful,這樣會影響它的scalability。然后我又研究了Azure Durable Function,Azure Scheduler等方案,最后在好友Ares的建議下,研究了Logic Apps,發現這個用來做Timer是一個很好的方案。

Logic App

而且它還有自動的retry機制,而且一旦出錯,也非常容易查找當時出錯的原因。

Logic App Debug

Availability Test

這個是Application Insights里的一個功能,可以從選定的機房往你指定的Service上發送請求,并且監控是否請求成功和網絡延遲。下圖就是從我選定的5個region給我的bot服務發送請求。延遲最大的是美國東部,因為我的bot服務部署在香港,所以美國東部距離最遠。

Availability Test

Key Vault

Azure的Key Vault可以很好的幫助我們保存密碼,密鑰,連接字符串之類的。而且MSI很好用,我可以只給我的Bot服務有訪問Key Vault的權限,我連我自己的azure賬號都不給訪問權限,真正的安全啊。

KeyVault

KeyVault AccessPolicies

環境

上面的全套基礎架構只是一個環境,我在整個開發流水線中,一共有三個環境,分別是DEV,UAT和PROD,使用Azure DevOps來完成CI/CD。都是微軟自家產品,所以AzureDevOps和Azure完美結合。我后面會另外再寫一篇關于我如何使用AzureDevOps來自動部署整個infrastructure的文章。

Environments

下圖就是運行了9天的生產環境的成本,一共是12澳幣,大約60元不到的人民幣,主要是花在了App Service Plan,因為我需要開啟Always On功能。以后改成Linux的App Service Plan后會便宜不少。

PROD Cost

這個是UAT環境運行18天左右,才花了3澳分,相當于人民幣1角5分不到。所以如果你對Azure的服務十分了解,并且你的服務是Cloud Native的,真心便宜啊。而且整個架構是高度可擴展的。

UAT Cost

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278039.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278039.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278039.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Teams Bot的ServiceLevel測試

每一個Teams bot實際上就是一個web api服務,這個服務通過Bot Framework和Teams進行通訊,所以對于Teams app的測試就是對于一個api service的測試。 軟件行業發展到如今,測試技術已經趨于成熟。單元測試,冒煙測試,整合…

BZOJ1016:[JSOI2008]最小生成樹計數——題解

https://www.lydsy.com/JudgeOnline/problem.php?id1016 現在給出了一個簡單無向加權圖。你不滿足于求出這個圖的最小生成樹,而希望知道這個圖中有多少個不同的最小生成樹。(如果兩顆最小生成樹中至少有一條邊不同,則這兩個最小生成樹就是不…

如何做Teams Bot的測試覆蓋

在我昨天的文章中介紹了如果對Teams bot做service level的測試,那到底要寫多少的測試代碼才算夠?如何才算測試到位了?這個時候我們就需要用”測試覆蓋率”來衡量,雖然覆蓋率高并不一定代表著就可以高枕無憂的以為我們軟件質量高了…

Spring Boot開發MongoDB應用實踐

本文繼續上一篇定時任務中提到的郵件服務,簡單講解Spring Boot中如何使用MongoDB進行應用開發。 上文中提到的這個簡易郵件系統大致設計思路如下: 1、發送郵件支持同步和異步發送兩種 2、郵件使用MongDB進行持久化保存 3、異步發送,直接將郵件…

Teams Bot如何做全球化

Office365在全球有大量的用戶,可以說是擁有最多用戶的商業SaaS平臺。Teams最近在發展迅猛,有1300萬日活用戶,已經超越了Slack。? Microsoft Teams overtakes Slack with 13 million daily users 我在設計Teams LuckyDraw bot的時候就希望我…

QuickBI助你成為分析師-郵件定時推送

創建報表過程中經常需要將報表情況定時推送給其他用戶,及時了解數據情況。高級版本郵件推送功能支持儀表板周期性推送到訂閱人,默認以當前登錄者視角查看,同時支持結合 行級權限進行權限控制 和 結合全局參數功能確定郵件推送內容參數&#x…

2019年5月 Teams Community Call (China)

這個月有四個話題: Tony Xia:這個月的Teams的產品更新,Teams開發能力的更新,開源項目更新,庫更新王遠:升級/遷移到Microsoft Teams劉鈺:Teams賬號注冊探索指南Paul Zhang/Cheung:Bu…

修改oracle 管理員密碼 cmd

1.sqlplus/nolog 2.conn / as sysdba 3.alter user 用戶名 identified by 新密碼;轉載于:https://www.cnblogs.com/taoqidexiaomao/p/9006927.html

在2019年6月Teams Community Call上分享的Teams app基礎架構視頻

我在2019年6月Teams Community Call(China)上分享的如何在azure上搭建典型的teams bot的基礎架構 會議視頻: 15:00 - 33:00 Download Video

解決 spring-cloud-starter-zipkin 啟動錯誤

應用場景&#xff1a;Spring Boot 服務添加 Zipkin 依賴&#xff0c;進行服務調用的數據采集&#xff0c;然后進行 Zipkin-Server 服務調用追蹤顯示。 示例pom.xml配置&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>s…

什么是Microsoft Teams的App Studio

Teams的app studio很多用戶可能不知道&#xff0c;但是對于一個teams平臺的開發人員來說&#xff0c;這個是開發利器&#xff0c;利用這個工具你可以輕松的配置manifest文件&#xff0c;可以輕松的一站式創建teams app所需要的所有東西。而且你可以很方便的可視化配置adaptive …

Spring Cloud-鴻鵠Cloud分布式微服務云系統—架構圖

這邊結合了當前大部分企業的通用需求&#xff0c;包括技術的選型比較嚴格、苛刻&#xff0c;不僅要用業界最流行的技術&#xff0c;還要和國際接軌&#xff0c;在未來的5~10年內不能out。作為公司的架構師&#xff0c;也要有一種放眼世界的眼光&#xff0c;不僅要給公司做好的技…

Teams bot的調用限制

上個月Teams團隊發布了對Teams app/bot調用api的頻率的限制。這也從側面說明Teams app越來越多&#xff0c;Teams團隊需要優先保證Teams本身的計算資源&#xff0c;來提供流暢的用戶體驗。 具體的每個限制指標在這里&#xff1a; https://docs.microsoft.com/en-us/microsoftt…

Array的sort方法

作為一個剛開始學習的前端&#xff0c;小結一下&#xff1a;sort方法&#xff1a; 如果調用該方法時沒有使用參數&#xff0c;將按字母順序對數組中的元素進行排序&#xff0c;說得更精確點&#xff0c;是按照字符編碼的順序進行排序。要實現這一點&#xff0c;首先應把數組的元…

如何使用ARM創建Teams Bot所需要的Azure資源

相信很多devops已經全面開始使用ARM來創建azure資源了&#xff0c;ARM有很多方便的地方&#xff0c;比如簡單易學&#xff0c;Infrastructure as Code&#xff0c;但是深入使用ARM開始會發現一些有待改進的方面。這篇文章主要是分享一下我在做Teams app的時候使用ARM來創建資源…

Bot Service自帶的數據分析統計功能

每個產品上線后都希望自己能實時看到多少用戶在使用我的產品&#xff0c;我的服務&#xff0c;有多少使用量&#xff0c;有沒有遇到問題。市面上做用戶數據、行為分析的公司也不少&#xff0c;但是大多數都需要我們修改一些代碼來集成第三方的sdk庫。 我的teams app上線后也急…

LuckyDraw bot有幸被提名為微軟2019的People's Choice app

上個月微軟進行了一個全世界提名活動&#xff0c;目標是選出微軟2019年度People’s Choice app。 很幸運&#xff0c;我的LuckyDraw bot得到了來自世界各地使用者的投票&#xff0c;其中也包含Teams中國社區和很多朋友的支持。 https://developer.microsoft.com/en-us/microso…

圖靈社區 和 大家網

http://www.ituring.com.cn/ http://club.topsage.com/ 大家論壇 http://www.topsage.com/ http://www.dxbbba.com/ 大學生必備吧 轉載于:https://www.cnblogs.com/onelikeone/p/9023267.html

Teams內嵌的卡片image的限制

我的LuckyDraw上線后收到了不少有價值的反饋&#xff0c;其中有一部分是針對圖片的&#xff0c;有一些用戶說他們填寫了image的url&#xff0c;但是圖片顯示不出來。 實際上這個問題在我提交這個應用到微軟審核團隊的時候&#xff0c;審核團隊也提出了類似問題。但這個是Teams本…

Python 面向對象編程(進階部分)

靜態方法&#xff1a; 通過 staticmethod 裝飾器即可把其裝飾的方法變為一個靜態方法。普通的方法&#xff0c;可以在實例化后直接調用&#xff0c;并且在方法里可以通過self.調用實例變量或類變量&#xff0c;但靜態方法是不可以訪問實例變量或類變量的&#xff0c;一個不能訪…