BaaS代表第二代云服務,相對于AWS锹淌、阿里云等公有云(IaaS性雄,PaaS)是第一代云服務,通過廣泛部署云數據中心解決了開發(fā)和運維系統(tǒng)不需要管理服務器的問題,BaaS則在第一代公有云數據中心基礎之上伴栓,對云計算資源進一步封裝诬辈、簡化與優(yōu)化,提供開發(fā)趴乡、運維和服務的一站式云服務对省。
這就是所謂BaaS(后端即服務)模式的興起,BaaS將公有云數據中心資源根據前端應用場景打包晾捏,通過簡化的調用接口提供給開發(fā)者使用蒿涎。通過減負,開發(fā)者得以集中精力于用戶的研究惦辛、APP軟件的創(chuàng)意與設計以及移動端的應用開發(fā)即可劳秋,能大幅簡化開發(fā)過程、周期胖齐、人員與資金投入玻淑,從而降低成本,并能把移動APP應用快速推向市場市怎。
以我的理解岁忘,BaaS架構的發(fā)展趨勢是解決業(yè)務的開發(fā)效率問題。
所以本系列文章主要介紹BaaS的發(fā)展和架構特點区匠。
本文是BaaS相關架構實踐的起始篇干像,主要介紹目前軟件開發(fā)模式的發(fā)展趨勢帅腌,目前BaaS的生態(tài)等綜合性內容,然后用幾個篇章詳細介紹BaaS的概念麻汰,發(fā)展趨勢速客,如何實踐BaaS架構。
最后我們在探討如何用BaaS的思路來五鲫,結合現有的技術體系來構建實施中臺溺职。
《BaaS后端即服務 - 通往中臺架構之路》 - 本篇會介紹相關的背景和總體思路。
《BaaS后端即服務 - 概念篇》- 介紹BaaS的概念位喂,在云架構體系中的定位浪耘。
《BaaS后端即服務 - 分析篇》- 介紹當前BaaS發(fā)展的趨勢和主流BaaS平臺功能的對比。
《BaaS后端即服務 - 中臺篇》- 介紹如何用BaaS的思路來構建中臺系統(tǒng)塑崖,是否可以成為中臺建設的基礎架構之一七冲。
1. 外面的世界很精彩
如果放在整個互聯網來看,在這個移動互聯網時代规婆,火熱的創(chuàng)業(yè)潮興起澜躺,O2O,物聯網抒蚜,互聯網金融掘鄙, 一個想法從產生到實施,也許只有幾個月的時間嗡髓,否則就會有類似的產品推出操漠, 在短暫時間內推出產品,去市場檢驗饿这,從而占據市場颅夺,對創(chuàng)業(yè)者來說,都是一場要快速執(zhí)行的戰(zhàn)役蛹稍。可以說這是一個激烈競爭的市場部服,在這樣的市場唆姐,只有高效,有效的模式會成功的存留下來廓八,而BaaS的架構就是誕生發(fā)展于移動互聯網這個熔爐中并快速發(fā)展起來奉芦,成為云架構體系中重要的架構思想之一。
對創(chuàng)業(yè)開發(fā)者來說剧蹂,成本和效率是最需要關注的兩個方面声功,第一他們缺少技術的積累,第二他們需要很低的成本去驗證他們的模式宠叼,從而成長起來先巴。這些云服務提供者成為他們最好的選擇其爵。
當創(chuàng)業(yè)技術團隊去實現他們的技術架構實現時,會欣喜的發(fā)現伸蚯,他們需要的一些通用功能有專門的技術創(chuàng)業(yè)型公司為他們提供服務摩渺,這些服務以云服務的形式對開發(fā)者開放,他們或者提供某個領域的功能剂邮,或者提供全面的功能摇幻,可以說正在慢慢形成一個云服務生態(tài),為創(chuàng)業(yè)者提供各種技術服務挥萌。
讓我們假設自己是一個O2O的創(chuàng)業(yè)的CTO绰姻,準備就一個O2O的想法,開發(fā)出一個業(yè)務平臺引瀑。 在這個移動互聯網時代狂芋,基本會需要移動APP和web的功能,那么一下的問題我們需要解決:
服務器部署維護
APP和Web網站開發(fā)
后端服務開發(fā)
平臺功能:
認證和授權
文件存儲
推送和通訊
地圖功能
支付功能
社會化分享
驗證和安全
智能識別
搜索
用戶行為分析
...
業(yè)務功能
活動管理
最新動態(tài)
...
當這些問題被規(guī)劃出來后伤疙,作為CTO银酗,你就需要招聘后端工程師,前端工程師徒像,IOS黍特,Android工程師,運維工程師等锯蛀,然后針對平臺的功能灭衷,會發(fā)現每一個都是需要去設計,實現旁涤,其中有些功能在技術上挑戰(zhàn)很大翔曲,比如搜索,地圖劈愚,支付這樣的功能瞳遍,獨自快速實現這些功能對創(chuàng)業(yè)公司來說是需要很大成本(時間和開發(fā)資源)才能完成。
但同時菌羽,隨著在技術市場上調研掠械, 會發(fā)現這些基礎的服務,有專門的公司提供解決方案注祖,這些方案可以被集成進來猾蒂,從而節(jié)省開發(fā)成本。比如:
推送通訊領域是晨,有極光推送肚菠,個推,環(huán)迅罩缴,融云蚊逢,UDesk层扶,Bmob,meChat等等
地圖功能时捌,有百度地圖LBS怒医,高德地圖
支付領域, 除了支付寶和微信支付自己提供的服務外奢讨,Ping++稚叹,現在支付等提供了更集成易用的整體支付解決方案。
驗證和安全拿诸, mob扒袖,云之訊提供了短信驗證等功能。
社會化分享亩码,友盟季率,jiathis等
...
基本在每個常用的功能領域,都有技術創(chuàng)業(yè)公司為此提供專門的服務描沟,這些技術公司通過敏銳的商業(yè)觸覺飒泻,快速響應技術市場的需求,從而也推動了新的技術架構服務的誕生吏廉。通過給創(chuàng)業(yè)者更多的方案選擇泞遗,由此創(chuàng)業(yè)者可以直接使用這些服務來實現自己的業(yè)務需求,從而能快速的將產品平臺開發(fā)出來給最終用戶使用席覆。
可以說這些業(yè)務和技術創(chuàng)業(yè)公司魚水情深史辙, 形成了生態(tài)互補,通過吸引創(chuàng)業(yè)公司使用它們的服務佩伤,技術平臺公司獲得更多的數據聊倔,創(chuàng)業(yè)公司則獲得了免費的越來越好的服務。技術平臺公司通過競爭生巡,會越來越完善他們的服務耙蔑,給開發(fā)者更好的開發(fā)體驗,從而自己在領域中獲得龍頭地位孤荣。
這些技術平臺公司在這個移動互聯網纵潦,云計算的時代,通過將某個領域的功能封裝成服務來獲取開發(fā)者用戶垃环,他們的這種模式,就是云架構最近幾年飛速發(fā)展起來的BaaS架構返敬。
2. 我們的世界有點無奈
2.1 系統(tǒng)繁多遂庄,不能輕裝上陣
技術部目前所有開發(fā)人員與系統(tǒng)相比太少,為什么有這么多系統(tǒng)劲赠,都起什么作用涛目,
于是我們決定用領域模型分層的方式去梳理這些系統(tǒng):
然后我們又發(fā)現秸谢,好像我們沒做太多事情啊,支持的業(yè)務可以數的過來霹肝,這些居然需要上百系統(tǒng)來支持估蹄。
這后面存在的問題肯定讓人深思,然后隨著我們梳理的深入沫换,會發(fā)現有些最主要的問題是:
- 重復建設
- 缺乏規(guī)劃
這里對開發(fā)資源和物理資源的浪費將顯而易見臭蚁。
這些系統(tǒng)也成為了一個龐大的負擔,我們需要花很大的精力去維護讯赏,升級垮兑,開發(fā),同時也要花很多公司的資源去運行漱挎,監(jiān)控系枪。
那么我們在審視下,如果我們需要開發(fā)一個新的業(yè)務應用磕谅,是否能想外面創(chuàng)業(yè)公司一樣私爷,得到很好的服務資源呢,作為國內最強的技術公司,我們的開發(fā)實力毋庸置疑膊夹,可是我們的效率呢衬浑?
如果一個軟件變得復雜難以維護需要去做代碼級別的重構,那么我們這種系統(tǒng)級別的復雜就需要架構級別的重構了割疾。
2.2 對開發(fā)人員技術要求很高嚎卫,不利于集中精兵強將做關鍵系統(tǒng)。
作為一線互聯網公司的技術開發(fā)人員宏榕,技術實力相對外部強很多拓诸,一方面原因是我們擁有很好的商業(yè)場景,需要我們用技術去保障麻昼,另一方面確實被高強度業(yè)務開發(fā)給淬煉出來的奠支。
另外我們發(fā)現,如果我們想利用外包做一些公司內部的系統(tǒng)抚芦,基本只能是不可能倍谜。
當我們需要開發(fā)一個新的業(yè)務系統(tǒng),
開發(fā)階段:
開發(fā)人員就需要考慮如何設計數據庫叉抡,分庫分表尔崔,安全,高并發(fā)褥民,性能季春,需要使用到, 數據庫(mysql消返,Hbase)载弄,消息中間件(notify耘拇,metaq), 緩存(Tair)宇攻,分布式調用(HSF)惫叛, ...J2EE里的那些技術公司開發(fā)人員都很熟悉了。
維護階段:
我們都知道我們隊系統(tǒng)穩(wěn)定性的要求可以說是: 穩(wěn)定壓倒一切逞刷。在這個大促期間嘉涌,大部分開發(fā)團隊的工作重心都是在圍繞穩(wěn)定性做準備,梳理系統(tǒng)架構亲桥,梳理系統(tǒng)強弱依賴洛心,設計限流預案等等。
于是高并發(fā)题篷,系統(tǒng)性能調優(yōu)词身,JVM等也成為公司開發(fā)人員的強項了。
可以說番枚,這樣做幾年業(yè)務系統(tǒng)下來法严,開發(fā)人員的技術能力得到很大的提升,通過嘔心瀝血葫笼,熬夜加班奮戰(zhàn)來維護支持業(yè)務發(fā)展深啤。
可是反過來想想,為什么我們做個業(yè)務系統(tǒng)路星,除了業(yè)務邏輯實現外溯街,還需要每個開發(fā)人員掌握如此多的技能。 作為業(yè)務系統(tǒng)的開發(fā)人員洋丐,不是應該專注于業(yè)務邏輯的開發(fā)嗎呈昔。 系統(tǒng)的穩(wěn)定性,后端的高并發(fā)性能不是應該有更底層友绝,更專業(yè)的團隊去做嗎堤尾,為什么每個開發(fā)團隊都要求去做,這些不合理是由什么造成的迁客,是分工郭宝?規(guī)劃?還是技術架構掷漱?
2.3. 業(yè)務系統(tǒng)和平臺技術系統(tǒng)界限不明確
公司內部經常有個這樣的問題粘室, 做技術系統(tǒng)的會在逐漸去做業(yè)務, 做業(yè)務系統(tǒng)的會想沉淀做平臺卜范, 這種現象反映大家因為KPI驅動想做出成績育特,當卻也是分工不明確導致大家對自己的目標不明確。
業(yè)務開發(fā)團隊需要去服務業(yè)務的需求,和技術開發(fā)團隊需要為業(yè)務開發(fā)提供各種能力缰冤,做好各種底層支持服務, 這種架構上的明確會帶來職責上的明確喳魏。
2.4. 系統(tǒng)之間缺乏集成協作標準棉浸,難以協同解決業(yè)務復雜性
這一點我們需要企業(yè)中間件軟件學習, 如在傳統(tǒng)銀行業(yè)務中刺彩,他們內服的各種系統(tǒng)可以在企業(yè)集中模式(EIP)迷郑,企業(yè)總線之類的標準協同起來完成復雜的業(yè)務。
3. 我們可以做什么
軟件工程很多是借鑒了建筑工程创倔, 在建筑領域嗡害,有一個公司很引人注目,遠大集團畦攘,在2010年上海世博會霸妹,他們用一天建成了遠大館而大出風頭。 最近他們的一個新聞是:
遠大集團19天建成57層高樓 建筑方式的革新成就中國速度”.
他們取得的成就是革新性的建筑方式知押,通過標準化建筑模塊來建筑房屋叹螟。
如果我們能把集團多年來的技術能力積累更加標準化,模塊化台盯,讓業(yè)務團隊可以對這些能力快速組裝使用罢绽,就是我們說期待的“中臺”能力了。
技術積累已經成一個完整體系静盅, 從云基礎建設良价,中間件,業(yè)務基礎等蒿叠。 我們需要梳理我們的能力明垢,把能力”建筑模塊化“,同時能力之間通過”標準化“協同栈虚。
這樣我們的開發(fā)團隊可以很好的分工開發(fā)各種能力模塊袖外,同時業(yè)務系統(tǒng)可以標準化的使用這些模塊。
3.1 構建能力超市魂务,利用精細市場管理曼验, 將開發(fā)模式由農貿市場轉化為現代化超市模式
我們知道, 城市化發(fā)展中粘姜,超市取代農貿市場是個趨勢鬓照。
原因是: 超市與農貿市場最本質的區(qū)別在于超市是連鎖經營,連鎖經營的特點是統(tǒng)一進貨孤紧、統(tǒng)一配送和統(tǒng)一管理豺裆。連鎖超市以連鎖制為軸心,以眾多的門店網絡為市場依托,以中央采購制開發(fā)銷售利潤臭猜,以現代化的配送中心獲取物流利潤躺酒,將市場信息向加工制造業(yè)滲透,發(fā)展定牌商品蔑歌,甚至形成供應鏈羹应,開發(fā)生產利潤〈瓮溃可以說园匹,連鎖經營是將工業(yè)生產中的標準化、程序化劫灶、規(guī)穆阄ィ化向流通領域延伸,在大幅度降低成本的同時也為消費者帶來了看得見的實惠本昏。
這種通過統(tǒng)一管理供汛,標準化的方式可以獲得規(guī)模上,效率上的最大優(yōu)勢凛俱。 我們的業(yè)務開發(fā)模式也應該學習現代化超市模式紊馏,用統(tǒng)一管理,標準化來提高效率蒲犬。
目前朱监,集團由于業(yè)務快速發(fā)展和技術規(guī)劃之間的差距,如果審視我們內部的開發(fā)生態(tài)原叮,各開發(fā)團隊由各自部門業(yè)務獨自發(fā)展赫编,很多資源存在重復建設情況,技術和業(yè)務不能很好的支持互補奋隶,對彼此或對市場整體能力不清晰擂送,這種重復造輪子就像農貿市場重復進貨一樣。 我們更需要現代化超市的模式唯欣,布局嘹吨,庫存,能力等有總體的管理和規(guī)劃境氢,各開發(fā)團隊的職責和能力能清晰的管理蟀拷,彼此之間能更好的協作。
能力成為這個超市的商品萍聊,不存在但是需要的能力會被采購, 沒有銷量的能力會逐漸廢棄问芬,銷量大的能力會被增強改進, 重復的能力會被避免寿桨。能力的種類會被統(tǒng)一布局此衅,能力的使用可以被監(jiān)控計費
這樣我們就可以形成一種有效機制,當某個能力被開發(fā)形成后,就可以在類似超市中被所有業(yè)務團隊看到使用挡鞍,由于業(yè)務團隊對這種能力的需求骑歹,他可以被得以進一步發(fā)展來滿足這些業(yè)務方需要。 而不是目前這樣各業(yè)務團隊需要類似的能力墨微,下面的開發(fā)團隊重復性的去開發(fā)類似功能而形成資源浪費陵刹。(比如我們想想我們內部有多少規(guī)則系統(tǒng)....)
能力的開發(fā)者和能力的消費者可以在能力超市的市場化規(guī)劃運作下,可以形成良性高效的生態(tài)欢嘿,避免資源的浪費。能力的使用者利用“超市“可以知道方便的了解內部的所有能力也糊,能力的開發(fā)者可以響應市場的需求炼蹦,開發(fā)出真正需要的能力來填補空白。
3.2 建立系統(tǒng)之間的類企業(yè)集成標準狸剃,讓多系統(tǒng)之間的數據交換更加便利
傳統(tǒng)企業(yè)中間件利用企業(yè)集成系統(tǒng)來協調多系統(tǒng)解決復雜業(yè)務問題掐隐。 公司的業(yè)務發(fā)展也需要我們的系統(tǒng)跟需要協調起來快速響應完成復雜業(yè)務的支持。
公司內部有很多場景需要數據之間數據同步钞馁,比如業(yè)務系統(tǒng)和搜索系統(tǒng)數據同步虑省。 ODPS離線數據和在線數據之間數據交互等。
目前這些系統(tǒng)之間數據交互是通過特定系統(tǒng)自己定義的API或者腳本實現僧凰。 這種標準的確實探颈,需要開發(fā)人員掌握每個系統(tǒng)的特定API,如果能指定一定的標準训措,就像企業(yè)集成一樣伪节,也將大大降低開發(fā)人員的開發(fā)門檻,提高開發(fā)的效率绩鸣。
3.3 開發(fā)從J2EE時代升級到云開發(fā)時代怀大,構建移動互聯時代的快速創(chuàng)新能力
J2EE時代的三層架構(表現層,中間層呀闻,數據服務層)將被移動互聯網云計算時代的三層架構(UI化借,MBaaS,平臺)取代捡多。
復雜業(yè)務系統(tǒng)可以在新架構基礎上變得簡單蓖康,松耦合,更易和內部局服,外部分享數據和接口钓瞭。
如上圖說是妹孙,目前我們的開發(fā)架構大部分還只是在第一種重度耦合的狀態(tài)或部分進入SOA架構骡湖,我們需要達到第三種開發(fā)架構狀態(tài)篷店,讓系統(tǒng)之間可以簡單,規(guī)范琴许,互通的完成復雜業(yè)務。
并且罐监,對業(yè)務開發(fā)團隊來說,他們的開發(fā)能力更專注前端鳞溉,交互瘾带,需要掌握的技術棧里就只需要javascript和Restful API就夠了,他們可以跟專注去理解業(yè)務模型和邏輯熟菲,快速構建業(yè)務系統(tǒng)看政,進行業(yè)務創(chuàng)新。
而對于后端團隊抄罕,將跟專注做平臺和服務允蚣,后者需要他們將J2EE時代的開發(fā)架構,比如MVC呆贿, RPC等架構向向微服務嚷兔,EDA,CQRS等云時代的架構升級做入,更好的將系統(tǒng)復雜性解構冒晰,利用服務化來構建滿足業(yè)務團隊的需要。
在架構升級改變下竟块,開發(fā)團隊的分工也將更加明確壶运, 比如:
業(yè)務團隊-> 前端,交互彩郊,業(yè)務邏輯
后端團隊-> 平臺前弯,服務,穩(wěn)定性
3.4. 在集團內部建立開發(fā)者生態(tài)
讓應用(業(yè)務方)秫逝,開發(fā)者恕出,平臺圍繞以數據形成一個良性生態(tài),在這樣一個平臺违帆,所有開發(fā)者的知識和經驗可以很好的被共享浙巫,對各種業(yè)務的開發(fā),架構的設計從設計到實現都能被大家說review刷后,關注的畴。同時建立開發(fā)的擴展和模塊標注,讓所有開發(fā)者都可以主動提交能力模塊并可能被中臺“能力超市”采購尝胆。