作為 SNG 應屆生入職的傳統,都會參加 SNG 的 mini 項目,每組大概10人,在短短10天的時間裡開發一個相對完善的 APP 。這對整個團隊來說是一件十分有挑戰的事情,小組内隻有兩個人負責背景架構/開發,通過雲平台部提供給我的支援,我們在騰訊雲上搭建了一套相對簡單但是功能基本符合需求的背景系統。本文将對背景架構進行簡單的介紹。
一款利用 LBS 的失物招領 APP ,支援釋出帶有地理位置的失物招領資訊、關鍵字比對失物資訊推送失主。
因為是在背景層面分析,我們主要在技術層面進行介紹。産品的主要功能相對簡單,主要實作
丢失物品的釋出
拾到物品的釋出
将撿到物品跟失主丢失的物品比對,将比對物品推送給失主的功能。
其中,主服務的邏輯處理需要至少有兩台伺服器,防止一台挂掉。其次,資料庫也需要有準備,對于本産品來說,更偏重查詢的使用。最後,影響性能的是比對釋出丢失物品的人是否與撿到物品資訊比對,再推送的相應丢失人的手機上,這就要考慮怎樣處理回更加節省時間,提高效率。
因為初始資金隻有1000元人民币,考慮到 mini 項目的背景壓力不大,是以均購買了相對低配的産品:
主伺服器:标準型 S1,1核 2GB,1Mbps,雲硬碟,基礎網絡。(廣州二區)
備伺服器:标準型 S2,1核 2GB,1Mbps,雲硬碟,基礎網絡。(廣州三區)
消息處理、推送伺服器:标準型 S1,1核 2GB,1Mbps,雲硬碟,基礎網絡。(廣州三區)
負載均衡:騰訊雲LB,基礎網絡。
資料庫:雲儲存 Mysql ,最低配,主/備異步複制。
消息緩存:雲存儲 Redis ,主從,最低配。

負載均衡:負載均衡的配置十分簡單
隻需要綁定後端的執行個體就可以了,LB預設監聽後端的8080端口,而且可以修改對應的權重,是以隻要把後端執行個體的 Nginx/Apache 端口改成8080即可。
Apache:
Nginx:
由于開發周期短,便于開發和調試,我們選擇了php作為背景語言,選擇了 larvel 架構進行開發,有興趣的同學可以移步https://laravel.com/進行詳細了解。伺服器選擇了ubuntu 16.04.01 LST 64位,php7.1版本語言, nginx 做接入。
有了架構,資料庫的連結就顯得十分友善,直接用資料庫的内網ip和相應端口,資料庫名稱即可連結。如圖為 laravel 的資料庫配置,具體值配置到了環境變量裡:
最為耗時的工作是比對丢失物品和撿到物品,laravel 架構有一個叫做 queue 的神奇功能。“ Laravel 隊列為不同的背景隊列服務提供統一的 API ,例如 Beanstalk , Amazon SQS, Redis,甚至其他基于關系型資料庫的隊列。隊列的目的是将耗時的任務延時處理,比如發送郵件,進而大幅度縮短 Web 請求和相應的時間。” 是以,果斷把最浪費時間的東西丢到 redis 裡面,這裡不僅可以使用 redis , Amazon SQS 等,也可以使用 rabbitmq , mysql ,隻不過,經過嘗試, redis 是最快的。
一旦有新的撿到物品,就将它跟丢失的物品作對比,把這些處理用 Job 的形式,丢到 redis 裡面,有專門的伺服器去處理 redis 裡面的任務。
說到 redis,騰訊雲的 redis 有個小坑,“它的密碼不是它的密碼”,仔細看使用示例之後你會發現,它的密碼是“執行個體名稱:密碼”,還以為代碼寫的有問題,導緻 redis 連接配接失敗。
背景有一個專門的伺服器,用于計算比對,推送消息。
隊列的消費需要一個守護程序監聽,這裡使用的事 python 的 supervisor 如下圖所示,我們的消息推送伺服器上開啟了20個程序同僚監聽這一個隊列,當有消息需要處理的時候,可以最多達到20個并行處理。到此為止,就是背景的簡單概況。
Mini 項目,9個人十天的時間,确實有很多考慮不到的地方,跟我廠動辄上億上千萬響應級别的項目,簡直是五戰的渣渣,但也是一個項目從0到1的實踐,踩過了很多坑,也積累了很多經驗。
也希望給後面 mini 項目的同學留個參考,做的簡陋,供大家吐槽。
雖然我們的項目很小,但是對于正常中小型企業的項目,在騰訊雲上建構确實是省時省力,減小了不少運維成本,性能也不錯,雖然都是低配伺服器,但是壓測結果還是很理想。
平時在雲上搭個小部落格啊,建個小網站玩還是挺爽的。