aws s3仅允许cloudfront访问_初创公司如何用AWS搭建高扩展性架构
????
亞信云天的理解? 初創(chuàng)公司需要快、多、好、省的技術(shù)架構(gòu)
o 快:針對(duì)業(yè)務(wù)需要可以快速獲得資源與服務(wù)
o 多:擁有豐富的云服務(wù)可供選擇,能不自己做就不自己做
o 好:強(qiáng)調(diào)擴(kuò)展性和高可用,既不要在一開(kāi)始被"錢(qián)"束縛住,又需要良好的用戶體驗(yàn)(能用是最基本的用戶需求)
o 省:可以彈性伸縮,并按需付費(fèi)是最好的節(jié)省
??無(wú)論是初創(chuàng)公司還是傳統(tǒng)企業(yè),很多架構(gòu)思路是相通的:OS、前端、后端、數(shù)據(jù)庫(kù)、框架等,根據(jù)自身需要選擇。之后要做的就是在云中找到對(duì)應(yīng)的服務(wù)功能。
? 云應(yīng)用架構(gòu)的7大設(shè)計(jì)原則
o 設(shè)計(jì)時(shí)考慮任何系統(tǒng)都會(huì)失效
o 松耦合和無(wú)狀態(tài)設(shè)計(jì)(只有無(wú)狀態(tài)的應(yīng)用才能更好的快速伸縮)
o 設(shè)計(jì)可擴(kuò)展性和自動(dòng)縮放
o 安全貫穿設(shè)計(jì)始終,體現(xiàn)在每層中
o 不要過(guò)多擔(dān)心約束和失敗(比如每次處理的能力還不夠多,要做到的是清晰的了解當(dāng)前的設(shè)計(jì)思路,因?yàn)樵剖菬o(wú)限擴(kuò)展的,所以干好一件事情后云中可以通過(guò)復(fù)制而擴(kuò)展能力)
o 多考慮平行分布式處理
o 充分使用各種不同的服務(wù)
? 初創(chuàng)公司可以按照如下方法漸進(jìn)式使用云服務(wù)
o 按業(yè)務(wù)生命周期方法:從測(cè)試開(kāi)始熟悉操作,再到后續(xù)生產(chǎn)部署,逐步習(xí)慣云服務(wù)
o 按應(yīng)用規(guī)模變化方法:從一臺(tái)EC2實(shí)例開(kāi)始,再根據(jù)業(yè)務(wù)發(fā)展引入靜態(tài)數(shù)據(jù)分離,關(guān)系數(shù)據(jù)庫(kù)擴(kuò)展,緩存等需求,逐步了解更多云服務(wù)
o 按業(yè)務(wù)需要方法:從基礎(chǔ)的計(jì)算/存儲(chǔ)/網(wǎng)絡(luò)等IaaS服務(wù)開(kāi)始,在逐步根據(jù)業(yè)務(wù)將消息隊(duì)列、全文搜索、郵件發(fā)送等直接使用PaaS服務(wù),逐步將精力放入業(yè)務(wù)創(chuàng)新
初創(chuàng)公司的業(yè)務(wù)和技術(shù)要求? 快速驗(yàn)證產(chǎn)品服務(wù)
? 為機(jī)會(huì)窗口而爭(zhēng)分奪秒(互聯(lián)網(wǎng)1年等于傳統(tǒng)7年)
? 小的技術(shù)團(tuán)隊(duì)沒(méi)有歷史包袱
? 關(guān)注于提供方案解決問(wèn)題
? 避免工程大而全和返工
? 規(guī)避風(fēng)險(xiǎn)準(zhǔn)備迎接高速成長(zhǎng)
初創(chuàng)公司的技術(shù)選型一、常見(jiàn)技術(shù)堆棧
1. 操作系統(tǒng):linux:centos,redhat,suse,ubuntu
2. 移動(dòng)端:IOS、Android;HTML5
3. 網(wǎng)站前端:PHP/ASP/JSP、HTML/CSS
4. 前端框架:Flex,jQuery,Sencha
5. 開(kāi)發(fā)工具:Eclipse,SVN,SDK/IDE
6. 技術(shù)框架:Struts,Springs,Hibernate;Velocity;Ruby on Rails
7. 開(kāi)發(fā)語(yǔ)言:Java,PHP,Python,Ruby,Net,Node.js,GO
8. 負(fù)載均衡:軟件:Nginx,Squid;硬件:F5,Citrix Netscaler
9. 數(shù)據(jù)庫(kù):RDB:MySQL;NoSQL:MangoDB
10. 緩存:Memcached ,Redis
11. 內(nèi)容發(fā)布:CDN,DNS
12. 其他:Lucene(全文檢索工具)
二、架構(gòu)的考慮? 高性能? 高可用? 可擴(kuò)展性o 支持客戶、業(yè)務(wù)、訪問(wèn)、和數(shù)據(jù)的高速成長(zhǎng)o 難于規(guī)劃,成長(zhǎng)無(wú)上限o 擴(kuò)展時(shí)性能不能受影響o 無(wú)縫:只需平滑的增加資源o 高效:維護(hù)每個(gè)用戶的低成本? 安全性? 便于管理? 成本可控? 快速交付三、AWS服務(wù)的解決方案? 敏捷、快速、靈活? 低啟動(dòng)成本、隨用隨付費(fèi)? 不再需要猜測(cè)容量? 集中精力創(chuàng)新? 擺脫無(wú)差異化的體力活? 數(shù)分鐘就可以全球化部署? IT整體成本降低六天完成初創(chuàng)公司的技術(shù)架構(gòu)設(shè)計(jì)一、第1天,開(kāi)發(fā)和私測(cè)首臺(tái)服務(wù)器(從云中啟動(dòng)一個(gè)vm開(kāi)始)? 通過(guò)云中的EC2實(shí)例來(lái)進(jìn)行測(cè)試(運(yùn)行諸如apache、mysql等)? 可以部署多臺(tái)來(lái)分角色,因?yàn)閯傞_(kāi)張,先從1臺(tái)vm開(kāi)始? 為服務(wù)器綁定IP地址,(限制:每個(gè)賬戶可以有5個(gè)Elastic IP地址)? 設(shè)置DNS域名來(lái)指向Elastic IP二、第2天,推出和公測(cè)1、要測(cè)試了,當(dāng)初的vm不夠用,需要更大的服務(wù)? 加大塊存儲(chǔ)容量(EBS)? 使用正確的虛擬機(jī)類型(如cpu核多、內(nèi)存多、GPU卡、硬盤(pán)讀寫(xiě)速度快等)? 按需改變虛擬機(jī)大小? 了解方案為長(zhǎng)期永久,具有過(guò)渡性(目標(biāo)是了解AWS中的各種操作、限制和性能方案)? 還沒(méi)有容錯(cuò)設(shè)計(jì)2、分開(kāi)網(wǎng)站應(yīng)用和數(shù)據(jù)層? 更多容量? 每層分別擴(kuò)展? 細(xì)調(diào)每層的實(shí)例o 實(shí)例類型o 存儲(chǔ)? 注重安全o 使用防火墻o 數(shù)據(jù)庫(kù)至于VPC私有子網(wǎng)3、如何選擇數(shù)據(jù)庫(kù)?SQL or NoSQL?為什么通常使用關(guān)系型數(shù)據(jù)庫(kù)?? SQL非常成熟,功能豐富? 許多現(xiàn)成的代碼、工具和知識(shí)? 擴(kuò)展設(shè)計(jì)思路明確發(fā)發(fā)可行o 例如:對(duì)頻繁讀取的apps,采用讀寫(xiě)分離? 現(xiàn)實(shí):未來(lái)將逐漸使用多種數(shù)據(jù)庫(kù)o 有些工作負(fù)載使用NoSQL更合適o 為每項(xiàng)工作選擇合適的工具4、經(jīng)驗(yàn)分享:關(guān)系型數(shù)據(jù)庫(kù)很復(fù)雜? 關(guān)系型數(shù)據(jù)庫(kù)要實(shí)現(xiàn)高可擴(kuò)展性,管理運(yùn)營(yíng)起來(lái)往往很困難? 管理不善的關(guān)系型數(shù)據(jù)庫(kù),會(huì)造成:數(shù)據(jù)不匹配和IT系統(tǒng)宕機(jī)下線的原因? 針對(duì)初創(chuàng)企業(yè)團(tuán)隊(duì)小,人員少在兼職,尤為如此AWS提供托管的關(guān)系型數(shù)據(jù)庫(kù)MySQL、Aurora、PostgreSQL、Oracle、SQL Server5、如何進(jìn)一步提升效率?? 部署靜態(tài)內(nèi)容—Amazon S3o 高可用性、易擴(kuò)展的對(duì)象存儲(chǔ)o 任何格式的靜態(tài)文件(javascript,CSS,images,videos)o 用戶可以直接上傳o S3 URLs 可以從S3直接提供o 讓網(wǎng)站服務(wù)器集中處理動(dòng)態(tài)內(nèi)容? 緩存這些靜態(tài)內(nèi)容—Amazon CloudFronto?全世界分布的邊緣站點(diǎn)o?在邊緣站點(diǎn)提供緩存 – 減少延遲 Reduce latency – 減輕原始服務(wù)器的負(fù)載 – 靜態(tài)和動(dòng)態(tài)內(nèi)容o 更少的時(shí)間緩存大量熱點(diǎn)數(shù)據(jù)o 優(yōu)化連接 – 優(yōu)化連接路徑 – 重復(fù)使用連接 – 對(duì)不能緩存的內(nèi)容也有幫助(減輕負(fù)擔(dān))? 數(shù)據(jù)庫(kù)緩存—Amazon Elastic Cacheo 從內(nèi)存讀取速度更快o 減少數(shù)據(jù)庫(kù)的工作負(fù)載o 部署簡(jiǎn)單o 完全托管(自動(dòng)替換失效節(jié)點(diǎn)、負(fù)責(zé)升級(jí)補(bǔ)丁管理)o 好的彈性擴(kuò)展o 兼容性(支持memcache,redis)三、 第3天,客戶上線1、高可用性被擺上臺(tái)面? 第2天的情況是:動(dòng)態(tài)內(nèi)容在EC2實(shí)例中,靜態(tài)放入S3,用CloudFront加速,用RDS托管數(shù)據(jù)庫(kù),并且用ElasitcCache緩存? 今天,繼續(xù)在第2天的基礎(chǔ)上,在另一個(gè)AZ(可用區(qū))中創(chuàng)建EC2保存動(dòng)態(tài)內(nèi)容,并且用ELB負(fù)載均衡來(lái)進(jìn)行跳轉(zhuǎn)o ELB是托管的負(fù)載均衡服務(wù)o 容錯(cuò)o 健康檢查o 分布在多個(gè)可用區(qū)o 彈性-自動(dòng)擴(kuò)展容量? 開(kāi)啟RDS的muti-AZ,這樣RDS具備高可用了? 在另一個(gè)AZ(可用區(qū))再創(chuàng)建一個(gè)ElasticCache的實(shí)例2、用戶訪問(wèn)的User Session問(wèn)題? 問(wèn)題:狀態(tài)通常存于本地磁盤(pán)(沒(méi)有共享)
? 簡(jiǎn)單解決:ELB Session stickiness(session綁定)
? 更好方案:DynamoDB(將session狀態(tài)保存在NoSQL數(shù)據(jù)庫(kù)中)
? ? ? ?o DynamoDB是托管的文件和KEY-VALUE存儲(chǔ)
? ? ? ?o 易啟動(dòng),易擴(kuò)展
? ? ? ?o 到百萬(wàn)IOPS
? ? ? ?o 讀和寫(xiě)
? ? ? ?o 一致、快速的性能
? ? ? ?o 持久性:特別適合存儲(chǔ)session data
四、第4天,讓我們病毒式成長(zhǎng)
1、目標(biāo):使用彈性IT代替猜測(cè)計(jì)算容量
2、使用自動(dòng)縮放能力(三劍客:CW、AS、ELB)
3、微服務(wù)化/SOA化?
將應(yīng)用分解許多成小的、功能單一的、松耦合的、無(wú)狀態(tài)的構(gòu)建單元
? 只在實(shí)例存儲(chǔ)上保存暫時(shí)的數(shù)據(jù)
? 只要超過(guò)單一http調(diào)用的數(shù)據(jù)均需持久保存,然后存儲(chǔ)
? 這樣就可以做到按需進(jìn)行彈性伸縮了
? 這樣的結(jié)構(gòu)雖然簡(jiǎn)單,但你仍需
? ? ? ?o 配置具體參數(shù)
? ? ? ?o 將代碼部署到多個(gè)實(shí)例
? ? ? ?o 管理開(kāi)發(fā)測(cè)試生產(chǎn)多個(gè)環(huán)境(Dev,Test,Prod)
? ? ? ?o 維護(hù)應(yīng)用的多個(gè)版本
解決方案:使用Elastic Beanstalk
? 容易部署、監(jiān)控和擴(kuò)展的三層web、應(yīng)用、數(shù)據(jù)庫(kù)架構(gòu)
? 基礎(chǔ)架構(gòu)由Beanstalk管理和部署
? 客戶仍然掌控
? 預(yù)配置應(yīng)用容器
? 容易更改配置
? 支持下述平臺(tái)
5、如果系統(tǒng)更復(fù)雜一些,可以使用SQS實(shí)現(xiàn)松耦合
? 將任務(wù)部署到隊(duì)列服務(wù)
? SQS通過(guò)隊(duì)列為后端系統(tǒng)提供緩沖
? 異步處理-自己把握節(jié)奏
? 移除關(guān)鍵路徑的延遲
五、第5天,增加更多功能
1、AWS擁有更多的服務(wù),你可以根據(jù)需要選擇
2、AWS服務(wù)的關(guān)于高擴(kuò)展和高擴(kuò)展性的服務(wù)
本身可以擴(kuò)展和高可用 | 與合適的架構(gòu)配合實(shí)現(xiàn)可擴(kuò)展和高可用 |
ElasticLoadBalancing | EC2(本身不是高可用,而是在部署在多個(gè)AZ中后,可以實(shí)現(xiàn)一個(gè)高可用架構(gòu)) |
CloudFront | VPC |
Route53 | |
S3 | |
SQS | |
SES | |
CloudSearch | |
Lambda | |
… |
3、在擴(kuò)大團(tuán)隊(duì)時(shí)保持對(duì)創(chuàng)新的關(guān)注
六、第6天,繼續(xù)快速成長(zhǎng)
數(shù)據(jù)太大了,需要擴(kuò)展關(guān)系型數(shù)據(jù)庫(kù)增強(qiáng)RDS實(shí)例
? 大的實(shí)例類型
? 更多存儲(chǔ)/更多IOPS
? 只讀副本read replca(主master—從slave)
o 擴(kuò)展到超度單一DB實(shí)例的計(jì)算容量
o 對(duì)RDS for MySQL、PostgreSQL 和 Aurora適用
o 【寫(xiě)】=>主 master
o 復(fù)制有延遲
o 能容忍過(guò)期數(shù)據(jù)的【讀】=>只讀副本(從)read replca(slave)
o 高一致性的【讀】=>主master
如果需要經(jīng)常寫(xiě)?
? 挑戰(zhàn):你遲早會(huì)達(dá)到主節(jié)點(diǎn)寫(xiě)操作或存儲(chǔ)的極限
? 方案1:聯(lián)合Fedration(根據(jù)數(shù)據(jù)功能分到多個(gè)數(shù)據(jù)庫(kù)上)
o 將數(shù)據(jù)庫(kù)表分成多個(gè)小的自立的數(shù)據(jù)庫(kù)
o 跨功能函數(shù)查詢很困難
o 對(duì)于單一較大的函數(shù)、表的幫助不大
? 方案2:分片Sharding(將一組數(shù)據(jù)分道多臺(tái)主機(jī)上)
o 將行的子集存入數(shù)據(jù)庫(kù)分片(大數(shù)據(jù)領(lǐng)域很常用)
o 應(yīng)用層面更復(fù)雜
o 擴(kuò)展性實(shí)際上無(wú)上限
o 運(yùn)營(yíng)的復(fù)雜性
另一種解決方案,NoSQL數(shù)據(jù)存儲(chǔ)—DynamoDB
? 犧牲關(guān)系數(shù)據(jù)庫(kù)的查詢和性能,以獲取
? ? ? o 更靈活的數(shù)據(jù)模型
? ? ? o 水平伸縮可以預(yù)測(cè)的性能
? 可以大規(guī)模無(wú)縫擴(kuò)展
? ? ? o 分布式系統(tǒng)可以對(duì)讀寫(xiě)均實(shí)現(xiàn)擴(kuò)展
? ? ? o 切片 + 復(fù)制
? 自動(dòng)分區(qū)
? ? ? o 數(shù)據(jù)大小增加
? ? ? o 增加預(yù)設(shè)容量
總結(jié)1、無(wú)用戶數(shù)上限的架構(gòu)
? 應(yīng)用層面做了自動(dòng)伸縮
? 數(shù)據(jù)層面做了多AZ部署
? 使用了緩存
? 使用了讀寫(xiě)分離、跨區(qū)部署的關(guān)系數(shù)據(jù)庫(kù)
? 用S3存動(dòng)態(tài)內(nèi)容
? 用DynamoDB存非結(jié)構(gòu)數(shù)據(jù)
? SNS、SQS、CloudSearch解決業(yè)務(wù)需要
? …
2、初創(chuàng)公司AWS架構(gòu)原則
? 保持簡(jiǎn)潔和無(wú)狀態(tài)
? 多使用托管的自動(dòng)縮放的服務(wù)
? 將EC2實(shí)例置于多可用區(qū)的自動(dòng)縮放組內(nèi)
? 選擇合適的數(shù)據(jù)庫(kù)類型
? 在多個(gè)層次巧用緩存
? 使用管理工具自動(dòng)化部署
?
總結(jié)
以上是生活随笔為你收集整理的aws s3仅允许cloudfront访问_初创公司如何用AWS搭建高扩展性架构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python大作网图片采集下载,多线程图
- 下一篇: [Unity3D] 用 C# 代码控制重