一、小微企業特色
互聯網的小微企業,往高大上說就是新銳企業,往低裏說呢就是窮B企業,無論怎麼樣,反正特色都是同樣的:java
- 沒有多少開發人員,能少一個是一個
- 沒有專職的崗位,DBA,運維,測試,這都是啥,反正都是開發人員一肩挑(若是老闆很討厭的話,會加一句,全棧)
- 沒有本身的硬件,反正能不本身建就不本身建(若是老闆打聽過的話,會說一句,上雲)
- 要快(若是老闆很煩人的話,會加一句,要敏捷)
在這種條件下,有能力的程序員表示頗有挑戰性,紛紛用腳投票去了騰訊、阿里這些大廠。而那些沒有能力的碼農(好比我),則不畏懼挑戰,決意在這種惡劣的環境下艱難求生(主要是大廠不要)。mysql
其實在企業的很長的一個發展階段,單機的性能是能夠扛着性能壓力的,因此咱們的第一個方案就簡單了。nginx
二、PLAN A
- 在雲服務商購買一個公司須要的域名,並配置域名指向購買的服務器IP
- 在雲服務商購買一臺雲服務器,安裝好nginx和java環境,nginx配置域名的指向,配置程序指向的雲數據庫地址
- 在雲服務商購買雲數據庫服務,好比用的最多的mysql
上面三種商品在一家雲服務商就能完成,全程只須要買買買就行了。並且價格都還算好,一臺普通的雲服務器在5000左右(1年費用),數據庫在6000多(一年費用),域名便宜,只要幾十塊而已,而運行起來也很簡單,只要把程序打包上去就能夠跑起來了。程序員
若是還須要省錢,固然能夠在雲服務器上自建mysql,那麼雲數據庫的錢就省了,但考慮到如下幾點,我仍是認爲開始就要分開服務器和數據庫:redis
- 企業的開發人員用人成本是很高的,若是在雲服務器上自建數據庫,那麼就須要對數據庫比較熟。但大部分開發人員用數據庫比較多,建就通常般了,並且就算建的話,對調參和分配權限也很難精通,爲了節約人工成本,能花錢買服務的就花錢買了
- 互聯網企業每每數據的價值大過應用程序的價值,因此爲了數據的安全,仍是和應用服務器拆開來比較保險
- 雲服務的價值很大方面體如今性能伸縮的靈活性上,而數據庫是最多見的性能瓶頸,若是應用服務器和數據庫在同一臺機,極可能即便提高了服務器配置,因爲資源分配不到數據庫上面(這個對數據庫配置人員要求比較高),因此不能在最短期解決問題,若是分開的話,一旦定位到是數據庫性能瓶頸,花錢能夠直接針對數據庫作性能提高
其實這個架構雖然很low,但其實不少的微小企業用起來一點問題都沒有,性能瓶頸直接靠花錢就能實時提高,壓力能夠說是很小的。我瞭解的不少企業在倒下前都尚未把應用服務器的性能用滿,可見應用服務器性能絕對不是微小企業的短板。但缺點也很明顯,那就是單點問題,全公司技術體系於一臺服務器,萬一有個好歹,企業就要無技術裸奔了。spring
三、PLAN B
這就是一個最簡單的集羣,加了一臺服務器,再把一些服務甩給了雲服務商,具體的狀況以下:sql
- 多購買一臺服務器,其實集羣很重要的一個判斷,就是是否能快速方便的橫向擴展,在服務器出現性能瓶頸的時候,能夠經過快速的增長服務器的方式解決問題。小微企業的業務發展是抽風式,不知道何時就忽然上量了,因此能直接靠加服務器橫向擴展解決性能問題是最幸福的。
- 多臺服務器就會有負載輪詢的問題,若是很窮,那麼固然能夠本身搭建nginx的集羣,但考慮到大多數程序員對於nginx也是用的多,配置的少,這活也能夠直接甩給雲服務商提供的負載均衡服務,並且通常都還提供界面分配負載的權重,比自建仍是要方便不少,後面作灰度上線也會用到。
- 雲服務商提供的負載均衡通常會有一個虛擬IP,把域名指向這個虛擬IP就完事了,若是在雲服務器上還有多個應用起不一樣的端口,那麼在服務器上還要起一個本身的nginx做爲本地代理。
- 在單臺服務器上,session和緩存都不是問題,但在集羣的環境下這都是事啊,雖然spring boot在這方面簡化了不少工做,但該改的還得改,該配的還得配,這裏經過redis搞定session和緩存,若是很窮,redis也能夠本身集羣,但一樣大部分人redis也是用的多,配的少,這活也扔給雲服務商了。
- 除了緩存,還有個須要多機共享的是文件,不能服務器1上傳的文件,服務器2看不到。若是很窮,本身搭建分佈式文件系統(好比TFS,FastDFS)也是能夠的,不過仍是那句話,何須呢,使用雲服務商提供的分佈式文件服務就行了。
- 其實還有一個集羣會遇到的問題就是定時任務,但這個沒辦法經過買買買來解決,不過spring quartz有解決方案,這個是程序員份內之事,就不麻煩雲服務商了。
雖然看起來不像是給微小企業的集羣方案,裏面全是買買買,但和人工成本比起來,這種一年只要幾千塊的服務(負載均衡、redis和分佈式文件系統能夠按量來付費),實際上是很便宜的,並且按量付費的話,能夠保證企業在業務量起來的狀況下才會有費用的增加。而業務量若是起來了,錢仍是問題嗎?數據庫
這算是個開篇,主要講下集羣會用到哪些東西,下一章,咱們會具體講講spring boot 的session,file和quartz在雲上集羣環境下的開發和配置。緩存
附件
特意看了一下,如今主流的三家雲服務商對上面提到的買買買服務都提供安全