今天一個朋友問我,我想做一個項目,兩年內做到1000w用戶量,並發數1000左右,需要用微服務嗎?
最近不知道什麼時候,微服務一下火了起來,人人在說微服務,很多公司都在用微服務,
今天就來討論一下,是所有項目都適合微服務嗎
1.什麼是微服務
微服務應該是從java那邊傳過來的,java的spring boot、dubbo,然後golang的go-micro,
就連php也有了微服務,phper肯定不滿啦,PHP咋了,作為世界上最好的語言,怎麼就不能有微服務!
哈哈,其實我也是一個phper。
一般情況下,我們項目初期都是單體架構,好處是簡單,易開發、易維護、易排查,還有易交接,
可是隨著功能越來越多,越來越複雜,例如一個系統有用戶模塊,商戶模塊,訂單模塊,認證模塊等,系統需要提供
web api,移動 api,後臺api等
mvc
這時候,把系統功能按模塊拆分開,把原來大而全的單體應用拆分成功能獨立的、自洽的小而美的多個應用的組合。這就是微服務
每個服務負責自己模塊的功能,獨立開發、運維、部署、維護,互不幹擾,用什麼語言,採用什麼架構自己說了算,相互之間可以通過協議通信
micro
2.微服務的利弊
先說好處:
a. 服務分治,相互獨立,可獨立技術棧,DB設計,更高的自主性;
b. 每個服務做到高耦合,外部接口交互數據,可擴展性強;
c. 有利於對抗高並發,性能較好;
不要以為用了微服務就萬事大吉了,能把微服務安全落地,穩定跑起來可不是容易的事情,凡事有利就有弊,說下弊端:
a. 開發、測試、運維難度增加,本來一次搞定的,卻要分開多個,每個都要來一遍,誰能不崩潰!
b. 穩定性差,調用鏈複雜,一個崩潰,一個性能差,可能影響多個業務;保證自己沒問題,但保證不了別人的服務沒問題呀!
c. 出現錯誤排查難度增加,定位不準,不同的團隊之間,就會相互推諉!
這時就需要一個監控系統,監控系統每個組件的運行情況啦!
總之,搭建微服務,需要強大的配套系統才能穩定的跑起來。
業界對微服務的應用也是褒貶不一,用好了是一大利器,用不好就是找死,目前沒有點實力的公司還是很難玩的溜。所以用不用要謹慎,想用前考慮好服務粒度細、體系架構複雜、開發效率低、服務治理難,監控維護難這些問題,用微服務,道路是曲折的,前途也不一定是光明的,也許就是一條不歸路。
3. 需要考慮哪些?
a. 服務拆分,拆分是一個很麻煩 的活,系統內部可能有千絲萬縷的聯繫,相互調用,如常見的連表,拆不好內部就是一團亂麻,難以維護,充分考慮自己的需求,合理拆分!分布式的數據強一致性,也是業界 的難題
b. 選好語言,找一個跟自己需求匹配度高的框架,這樣可以省很多事。目前微服務這塊java可能是首選。
網上很多文章把微服務說的很高大上,但是能用好可不是容易的事情。
因為微服務架構本身的複雜性,初創公司系統出於快速開發、快速驗證的考慮,很少在一開始就使用微服務架構,後面看情況要不要用微服務。要用微服務,首選把分布式系統穩定跑起來再說吧。畢竟不是所有系統都適合,何必拿大炮打蚊子呢。
微服務都是逐步演進的,不是一蹴而就的,演化思路應該是一步步鋪基礎設施,一點點拆分微服務。
微服務是一個很大的話題,裡面的內容可以寫一本書了,所以很難把細節將清楚。本篇文章就當做是概念介紹吧!