成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

移動云平臺的基礎架構之旅(二)- 云代碼篇

Carson / 1440人閱讀

摘要:作為一款優(yōu)秀的平臺系統(tǒng),其云代碼的功能如何,是如何實現(xiàn)的,又有哪些加分項,接下來將為大家一一揭曉。當然為了開發(fā)者更快的開始,同時提供了和項目來讓開發(fā)者更快接觸云代碼。

云代碼的由來

隨著MBaaS的發(fā)展,取代移動企業(yè)應用程序平臺的趨勢也越來越明顯。MBaaS系統(tǒng)為了讓企業(yè)能方便快捷的開發(fā)自己移動應用程序,提供了諸多移動客戶端支持,有最通用的REST API,也有方便移動開發(fā)者的軟件開發(fā)工具包,還有一定程度的監(jiān)控和分析服務提供。而對于相對比較復雜的應用程序,開發(fā)者有時不想也不必在移動設備上運行很復雜或很費時或無法實現(xiàn)的業(yè)務邏輯,這種需求催生了云代碼的產(chǎn)生。

云代碼的愿景

想象一下,如果你想要少量結果信息,但卻必須要向設備發(fā)送大量對象列表,或者調用大量REST API才能完成此項工作時(比如統(tǒng)計匯總操作),這種操作顯然會消耗你大量的帶寬和用戶流量。

想象一下,如果你想要設備周期性定時完成某個任務或者想在后臺一直運行某個任務(比如資源回收垃圾清理),這種操作顯然很不可靠,一方面用戶可能會隨時關閉設備上的應用,另一方面在后臺一直運行某個任務顯然也會耗費用戶設備電量等資源,得不償失。

想象一下,當你需要調用第三方平臺API時需要對方回調時比如完成某個支付操作,服務提供商在支付成功后執(zhí)行回調,你需要根據(jù)回調結果完成后續(xù)操作比如同步記錄到數(shù)據(jù)庫中,這種操作在移動應用在沒有自己的后端服務器時也很難完成。

想象一下,你的某個App應用有iOS,Android,JavaScript等多個設備平臺版本,當你新增一項功能,同一套業(yè)務邏輯需要在所有平臺做同步開發(fā),當你修改一項功能,同樣需要在所有設備平臺做新版本發(fā)布更新操作,如果產(chǎn)品迭代很迅速那這種頻繁的操作顯然會大大增加移動開發(fā)的成本和效率,但效果卻可能不見得很好。

想象一下,當某個用戶注冊了你的應用,你需要對該用戶增加一些信息來用于統(tǒng)計,或者用戶購買了應用里的某個商品,你需要收集除訂單外額外的信息,這類在用戶觸發(fā)某些特定操作時會自動額外產(chǎn)生的邏輯(Hook操作),這些Hook操作并不適用在移動端編寫。

伴隨移動開發(fā),類似上面的情況多有發(fā)生,此時MBaaS系統(tǒng)提供的云代碼功能就是為移動應用量身定做的解決類似上面問題的方案,云代碼的愿景就是方便移動開發(fā)者徹底擺脫服務器,隨心所欲的開發(fā)各種移動應用程序。

MaxLeap作為一款優(yōu)秀的MBaaS平臺系統(tǒng),其云代碼的功能如何,是如何實現(xiàn)的,又有哪些加分項,接下來將為大家一一揭曉。

MaxLeap云代碼的功能

有了云代碼的背景愿景,那云代碼需要提供的基礎功能就很顯然了

首先得提供基礎服務和框架,方便用戶開發(fā)云代碼

其次得提供代碼托管,能很方便的讓用戶快速部署代碼到云端運行

最后提供日志和相關監(jiān)控工具,能對線上代碼的錯誤及性能特征有更多了解,以便優(yōu)化自己的程序

MaxLeap云代碼的實現(xiàn) 1、讓開發(fā)者如何開發(fā)云代碼

如何提供基礎服務和框架來方便用戶開發(fā)?由于用戶的開發(fā)環(huán)境和擅長的開發(fā)語言各種各樣,比如使用Java,使用NodeJs,使用Python,使用JavaScript的等等,我們提供對應的各個開發(fā)語言的基礎云代碼SDK,豐富用戶的選擇,降低用戶開發(fā)門檻和成本,這樣云代碼在CloudCode SDK基礎上開發(fā)就會非常便捷,這些CloudCode SDK和MBaaS對外提供的移動SDK不同的地方在于它并不在移動設備上運行,而是在云端運行。也就是說開發(fā)者先要選擇自己喜歡的云代碼SDK,比如我很擅長JAVA,所以我會選擇cloud-code-java-sdk來開發(fā)我的云代碼,同時云代碼SDK還要提供本地開發(fā)測試框架,總不能讓用戶線上開發(fā)調試吧,本地開發(fā)本地調試完成后再部署到云端。當然為了開發(fā)者更快的開始,MaxLeap同時提供了Demo和Quick-Start項目來讓開發(fā)者更快接觸云代碼。

2、云代碼如何為用戶提供服務

開發(fā)者在使用云代碼部署到云端后該如何訪問云代碼?MaxLeap的云代碼是通過基礎的REST API來訪問,云代碼SDK負責提供Http服務對外暴露REST API,因為基于Http可以很好的兼容不同開發(fā)語言,實現(xiàn)跨平臺訪問,當然這些API不會直接暴露在用戶面前,用戶只有通過調用MBaaS的云代碼服務API才能間接訪問。

3、云代碼能為用戶提供哪些服務

不同開發(fā)語言的基礎云代碼SDK其實都具有相同的功能,最重要的是數(shù)據(jù)存儲服務,CloudCode SDK通過封裝一系列REST API來讓開發(fā)者很便捷的訪問基礎MBaaS服務。除此之外還要提供云函數(shù)、后臺任務、Hook操作、消息推送、日志、安全訪問、分布式計數(shù)器、分布式鎖等功能。

數(shù)據(jù)存儲服務

通過SDK可以很方便的使用MaxLeap的存儲服務,例如對象的CRUD操作,同時集成了手機行業(yè)主流的金幣系統(tǒng)。

云函數(shù)

運行在MaxLeap云端的函數(shù),定義好云函數(shù)后可以通過REST API方式來訪問,這個API是同步的。同時云函數(shù)提供白名單功能(通過界面設置),方便被其他第三方網(wǎng)絡服務調用。

后臺任務

同樣是運行在MaxLeap云端的函數(shù),對于長期運行的任務而言,后臺任務非常有用,例如與響應時間較長的外部網(wǎng)站集成或分批發(fā)送推送通知。如果您在運行云函數(shù)時經(jīng)常遇到超時錯誤,則可以考慮使用后臺任務,同時當您部署云代碼后,可通過后臺界面進行計劃任務,你可以計劃一次性任務或者周期性任務,這不但可以方便管理你的后臺任務,同時也能清楚的追蹤你的任務狀態(tài)。

Hook操作

Hook用于在對 Cloud Data 進行任何操作時(包括新建,刪除及修改)執(zhí)行特定的操作。例如,我們在用戶注冊成功之前,可以通過beforeCreate Hook,來檢查其是否重名。也可以在其注冊成功之后,通過afterCreate Hook,向其發(fā)送一條歡迎信息。Hook能很好地實現(xiàn)與數(shù)據(jù)操作相關的業(yè)務邏輯,它的優(yōu)勢在于,所有的業(yè)務在云端實現(xiàn),而且被不同的應用/平臺共享。

消息推送

在移動應用中,為每個客戶端用戶推送系統(tǒng)消息或定制消息必不可少,通過該功能開發(fā)者可以很便捷的將消息推送到所有或指定設備上。

分布式計數(shù)器/鎖

云代碼在云端是一個分布式應用,提供計數(shù)器、鎖相關的功能以便多個實例之間可以共享同一份數(shù)據(jù)。

日志

提供Logging功能,以便您能記錄Function,Hook或者Job在運行過程中出現(xiàn)的信息。

命令行工具

可以方便用戶云代碼項目的上傳,部署,停止及版本管理。

4、云代碼該如何管理

云代碼作為在云端部署的代碼,MaxLeap是如何管理它們的呢?在這項重中之重方面我們可能會遇到下面這些問題:

每個開發(fā)者的環(huán)境不同,操作系統(tǒng)也不相同,如何降低搭建各種環(huán)境的成本以及降低對操作系統(tǒng)的依賴、降低硬件要求和應用環(huán)境之間耦合度同時降低虛擬化消耗?

管理的應用可能成千上萬,但是服務器資源就那么多,該如何對每個應用實現(xiàn)虛擬化來整合應用和服務器降低成本?

每個應用的重要程度也不同,有重度用戶需要高可用高性能的服務,有低度用戶可能一天也不會有幾個請求,資源該如何分配?

用戶的代碼部署在云端,如何保證用戶的應用代碼安全?

用戶代碼服務如何做到高可用,出現(xiàn)故障該如何轉移,如何做到服務不間斷,新發(fā)布的代碼出現(xiàn)異常該如何回滾?

基于上面遇到的問題,我們把用戶的云代碼作為一個松耦合的單個服務,也就是現(xiàn)在流行的微服務架構,通過docker來實現(xiàn)對微服務容器化,因為docker本身就是源于Paas,在MBaaS系統(tǒng)也非常適用,我們不用為每個云代碼應用開啟一個虛擬機來降低硬件要求和應用環(huán)境之間的耦合度,這能大大降低虛擬化消耗,降低成本,而且docker還能為應用提供一個從開發(fā)到部署上線都一致的環(huán)境,非常便于管理代碼的流水線,讓我們可以對云代碼從開發(fā)到發(fā)布部署簡單可靠的控制。同時Docker隔離應用的能力非常適用于用戶的云代碼,能讓我們比通過虛擬機更好的整合云代碼應用和服務器,基于docker,我們能為每個不同的云代碼應用創(chuàng)建隔離的環(huán)境,并為他們分配指定的服務端口、內存資源等來隔離應用。

在我們看來用戶每次的代碼發(fā)布都是一個構建鏡像并推送鏡像到私服上的過程,每次代碼部署都是從私服上獲取鏡像并啟動一個容器的過程,每次停止部署都是一個容器卸載的過程,每次升級代碼都是一個重新生成不同標簽的應用鏡像的過程。用戶每次上傳發(fā)布云代碼都需要為它指定一個版本,不同的版本會生成不同的鏡像標簽,可以同時部署多個版本,但我們做了限制,最多只能同時發(fā)布2個版本,我們稱之為灰度發(fā)布,這是為了能讓你的代碼能平滑過渡升級,在灰度發(fā)布過程中用戶需要設置版本負載均衡比重,以做到服務不間斷,基于版本控制你可以回滾你的代碼,你可以選擇你發(fā)布過的任意版本進行部署,這真的非常方便。

對于用戶的云代碼鏡像、啟動的容器、部署的策略以及容器所在的宿主機我們會有一個專門的CloudCode-Manager服務來進行管理,我們稱這個服務為hydra(海德拉)。它希臘神話中的九頭蛇,傳說它擁有九顆頭,其中一顆頭要是被斬斷,立刻又會生出兩顆頭來,在這里我們寓意用戶的云代碼可以達到高可用,如果用戶部署的任何一個云代碼實例出現(xiàn)故障達到服務不用,系統(tǒng)會自動在其他宿主機上重新啟動一個相同實例。為了達到高可用、故障轉移,云代碼SDK需要提供心跳接口,在用戶部署云代碼后每隔一段時間hydra都會做心跳檢查,檢查失敗重試一定次數(shù)后便認為該服務已經(jīng)失效,我們會在另一臺宿主機上重新部署一個和故障實例一模一樣的實例,然后再卸載故障實例,如果卸載故障實例失敗,比如故障實例所在的宿主機發(fā)生宕機,那么該故障實例會永久成為一個孤島實例等待被強制回收。如果應用的云代碼被重度使用超過負荷可以隨時擴容,或者通過縮容來較少成本,通過任意擴容和縮容也就是通過部署容器任意實例數(shù)量來真正達到高可用,最常用的使用場景是商家在做活動時有訪問高峰可以快速增加實例資源來減少壓力,日常時則減少實例以低成本運行。

通過docker來整合應用和服務器,一臺宿主機上可能部署了上百個容器應用,那應用是如何分發(fā)的呢,在云代碼SDK中我們提供了REST服務,比如云函數(shù)、后臺任務、心跳等API,所有應用的這些REST服務在啟動后都是監(jiān)聽在容器的8080端口,容器需要允許外部訪問就必須要映射容器端口到宿主機,所以在應用分發(fā)過程中,宿主機的端口管理非常必要,我們使用mysql來存儲所有宿主機的信息,包括所有提供給云代碼容器使用的可用端口,通過樂觀鎖來保證端口的并發(fā)分配,啟動任意云代碼容器時都會分配一個映射端口給容器,同時在zookeeper中同步應用的云代碼服務地址提供給MBaaS云代碼服務使用。這個過程使用事務來保證容器啟動和數(shù)據(jù)庫信息的一致性,同時使用zookeeper分布式鎖來防止同一個應用被同時操作。云代碼服務的REST層實時監(jiān)控zookeeper中云容器訪問地址信息變更,通過hosting形式提供路由功能,通過負載均衡算法選擇可用地址來訪問宿主機上的云代碼達到分流效果,這樣就能做到簡單有效的應用分發(fā)。

上面我們說到云代碼容器通過端口映射來允許外部訪問,但考慮到用戶的代碼安全,并不是任何機器都可以訪問云代碼容器,這就需要一個網(wǎng)絡安全體系來對用戶的訪問和網(wǎng)絡進行限制。在網(wǎng)絡隔離安全方面,我們在Docker的標準網(wǎng)絡橋接接口docker0上啟用內核防火墻iptables規(guī)則來限制Docker容器的源IP地址范圍與外界通訊,所有的云代碼宿主機只能由maxleap和hydra服務所在的機器訪問,而云代碼訪問maxleap內部服務需要通過反向代理實現(xiàn)。

在宿主機和容器之間安全隔離方面,通過訪問控制的安全策略,使用selinux配置Linux內核安全模塊,從而實現(xiàn)強制性的訪問控制(MAC)用以將進程約束在一套有限的系統(tǒng)資源或權限中。在容器與容器之間通過cgroups防止通過耗盡系統(tǒng)資源引發(fā)拒絕服務(DoS)攻擊,比如限制容器的CPU使用、內存使用、存儲使用。

5、云代碼該如何監(jiān)控

使用微服務容器化云代碼能為應用開發(fā)者省去部署和維護方面的負擔,但代價是一定程度上減弱了線上環(huán)境的透明性,為了能對線上代碼的錯誤和性能特征有更多了解以便優(yōu)化自己的代碼或者擴容、縮容來達到水平擴展,我們需要給很好的監(jiān)控云代碼。

1、首先是日志信息的收集,云代碼的系統(tǒng)日志、用戶的日志這些都需要收集起來提供給用戶查看,MaxLeap的云代碼使用主流的Logstash+elasticsearch來完成日志收集工作,我們會在每臺宿主機上啟動一個logstash-forwarder服務作為shipper來收集指定的云代碼日志,Logstash匯聚日志后轉發(fā)到ES存儲。

2、其次是對容器資源的監(jiān)控,Docker容器通過namespace做資源隔離,通過cgroup來做資源限制,我們有個專門的docker-monitor服務來監(jiān)控所有宿主機上云代碼容器的指標,它會周期性獲取已注冊的宿主機上所有云代碼容器的cgroup stats,收集指標包括CPU MEM IO等,然后將數(shù)據(jù)PUSH到ES里。

3、最后是展示給用戶,MaxLeap通過后臺界面的方式展示出所有容器實例的性能和狀態(tài),還有部署的云代碼版本所有的日志信息,用戶可以很直觀的了解到自己的云代碼有什么錯誤的信息,在什么地方有瓶頸,該在哪方面優(yōu)化代碼。而我們內部會通過Kibana來展示,并通過Nagios來報警。

MaxLeap云代碼的衍生-云容器

有客戶看到這里說:你說了那么多,我就是不想用你的云代碼SDK來寫,熟悉你的SDK都要花費好長時間,用看官方文檔頭都大了,我就想用關系型數(shù)據(jù)庫,我就是想用我自己寫的后端服務或者之前公司已經(jīng)寫好的程序,咋辦?嘿,MBaaS系統(tǒng)的愿景是讓用戶完全擺脫服務器,但遇到這種已經(jīng)有自己服務器和數(shù)據(jù)庫并大量線上使用的客戶讓他們選擇MBaaS系統(tǒng)便得仔細考量是否值得了??剂康竭@類需求,MaxLeap在云代碼的基礎上衍生出了云容器的概念,它是可以幫助用戶部署及運維其后端應用程序的代碼托管服務,用戶只需要提供服務端的業(yè)務邏輯,包括靜態(tài)網(wǎng)站或者動態(tài)應用程序,而服務端的高可用、多實例、負載均衡、不中斷服務的平滑升級等都由云容器提供支持。沒錯,云代碼有的功能它都可以有,云代碼沒有的功能它也有,一個是數(shù)據(jù)源功能,很多企業(yè)客戶內部使用的數(shù)據(jù)庫都是mysql這種關系型數(shù)據(jù)庫,讓他們一下切換到MBaaS上的NoSql數(shù)據(jù)庫會很不放心,特別對事務要求很嚴格的業(yè)務邏輯,人家可能一看到你的數(shù)據(jù)庫是使用Nosql就放棄了,能很方便的遷移也不行,就是這么直接,云容器的數(shù)據(jù)源功能則會幫讓他們放下很大一部分顧慮,它可以讓用戶使用并管理自己的關系型數(shù)據(jù)庫,而另一個二級域名功能可以讓用戶在部署云容器后可以直接訪問他的云服務。作為云代碼的升級版,云容器的底層架構都是基于云代碼的實現(xiàn),這完全降低了用戶Dev&Ops上的難度。由于篇幅原因,更多云容器相關的信息本篇文章不再贅述了。

MaxLeap云代碼的展望

看到這我們發(fā)現(xiàn)MaxLeap的云代碼、云容器的架構基本都是圍繞docker容器這個生態(tài)圈來實現(xiàn)的,那么如何更好的維護和優(yōu)化這個生態(tài)圈將是我們將來的重中之重,在這里我們給出一些我們未來一段時間將要實現(xiàn)和優(yōu)化的關鍵信息:

所有容器資源通過Mesos申請

所有容器生命周期通過Marathon管理

更智能的資源分配機制,更智能的壓力監(jiān)控實現(xiàn)自動擴容/縮容

用戶云代碼托管方式支持git等第三方倉庫

用戶上傳云代碼、云容器支持增量上傳來減少等待時間

更多容器安全方面的優(yōu)化

更多云代碼/容器操作的Dev&Ops自動化

更多基建架構方面的調整優(yōu)化

MaxLeap更強大更優(yōu)秀的云代碼/云容器服務敬請大家期待。


相關閱讀:
移動云平臺的基礎架構之旅-云應用篇

作者系力譜宿云 LeapCloud 團隊_云服務研發(fā)成員:David Young【原創(chuàng)】
力譜宿云首發(fā)地址:https://blog.maxleap.cn/archi...

歡迎關注微信訂閱號:從移動到云端
歡迎加入我們的MaxLeap活動QQ群:555973817,我們將不定期做技術分享活動。

若有轉載需要,請轉發(fā)時注意自帶作者信息一欄并本自媒體公號:力譜宿云 LeapCloud,尊重原創(chuàng)作者的勞動成果~ 謝謝配合~

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/26646.html

相關文章

  • 移動平臺基礎架構之旅-應用

    摘要:背景當下后都能在手機鍵盤上敲字如飛,后的都可以坦然的搖微信,移動互聯(lián)網(wǎng)可謂炙手可熱。傳統(tǒng)移動開發(fā)技術方案難題終端移動平臺太多微信而且不同平臺還有版本差異,對于開發(fā)調試簡直是一場噩夢,要想實現(xiàn)統(tǒng)一覆蓋沒有雄厚的資本支持是非常困難的。 背景 當下10后都能在手機鍵盤上敲字如飛,60后的都可以坦然的搖微信,移動互聯(lián)網(wǎng)可謂炙手可熱。隨著智能手機的快速發(fā)展,移動APP作為登入移動互聯(lián)網(wǎng)最便捷的方...

    greatwhole 評論0 收藏0
  • 從應用到平臺 - 服務架構演進過程

    摘要:應用的研發(fā)上線運維運營形成閉環(huán),順利完成從對內服務到公共平臺的升級。從功能角度,只能支持靜態(tài)方式設置反向代理,然后,而平臺有服務對應的后端服務和端口是有動態(tài)調整需求。架構上是基礎組件需要進行升級,數(shù)據(jù)訪問層日志監(jiān)控系統(tǒng)等。 介紹 ? ? ? ?MaxLeap早期是一家研發(fā)、運營移動應用和手機游戲公司,發(fā)展過程中積累了很多通用組件。這些組件很大程度幫公司在移動研發(fā)過程中節(jié)省了時間和成本,...

    LiangJ 評論0 收藏0
  • 關于分布式系統(tǒng)思考(

    摘要:收到所有參與者回應后,完成事務。不管是還是,都是通過節(jié)點間的交換消息去達到一致的狀態(tài),這也是分布式系統(tǒng)的常用做法。從業(yè)期間,負責過訂閱系統(tǒng)制作云服務開源平臺分布式任務調度系統(tǒng)等產(chǎn)品的設計研發(fā)工作。 接著上一篇的內容,詳細介紹一些主流數(shù)據(jù)庫在分布式場景下用到的算法和思想,主要提及數(shù)據(jù)一致性相關的一些策略,并分析其利弊和典型應用場景。 對于數(shù)據(jù)庫來說,可能關心的最多的就是數(shù)據(jù)的一致性了,由...

    cuieney 評論0 收藏0
  • 關于分布式系統(tǒng)思考(

    摘要:收到所有參與者回應后,完成事務。不管是還是,都是通過節(jié)點間的交換消息去達到一致的狀態(tài),這也是分布式系統(tǒng)的常用做法。從業(yè)期間,負責過訂閱系統(tǒng)制作云服務開源平臺分布式任務調度系統(tǒng)等產(chǎn)品的設計研發(fā)工作。 接著上一篇的內容,詳細介紹一些主流數(shù)據(jù)庫在分布式場景下用到的算法和思想,主要提及數(shù)據(jù)一致性相關的一些策略,并分析其利弊和典型應用場景。 對于數(shù)據(jù)庫來說,可能關心的最多的就是數(shù)據(jù)的一致性了,由...

    fxp 評論0 收藏0
  • 搭建高效架構七個步驟

    摘要:創(chuàng)建一個強大可靠的云架構對于和企業(yè)的長期成功來說是至關重要的。高效的云架構不是憑空出現(xiàn)的。改變你的云存儲方案宣稱,專注于一種存儲類型不是一個好的選擇。此外,為不同的數(shù)據(jù)集利用不同的云存儲選項也可以帶來性能,成本和功能上的優(yōu)勢。創(chuàng)建一個強大可靠的云架構對于IT和企業(yè)的長期成功來說是至關重要的。遺憾的是,許多云架構都是在近幾年的時間內隨意構建的,無法滿足技術和業(yè)務快速發(fā)展所帶來的需求增長。如果您...

    joyvw 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<