從程序員進階到架構師,史上最全進階詳解(中篇)-架構擴展篇

NoSQL 編程語言 GFS 程序員 優知學院 優知學院 2017-08-28

從程序員進階到架構師,史上最全進階詳解(中篇)-架構擴展篇

本文作者,陳睿 優知學院創始人,10年以上產品技術經驗,前百度研發經理、攜程定製旅遊CTO。

優知學院是IT人在線進階站,幫助IT人升職加薪,提供系統的互聯網產品技術入門指南、進階乾貨資料和課程,以及定期的線下實戰活動。

從程序員到架構師進階,將涉及到數據結構和算法,Java編程語言掌握,Javaweb核心技術,數據庫,Java框架與必備工具,系統架構設計等六大環節。

這是中篇,包含數據庫設計以及大數據方案, Java相關的框架與工具(消息隊列,web框架,構建工具,負載均衡,服務器等)。

最後一篇,講重點講解大型網站系統架構設計。

數據庫設計原則和大數據方案

從程序員進階到架構師,史上最全進階詳解(中篇)-架構擴展篇

談到數據庫將涉及到如下範圍:

數據庫設計原則和範式

第一範式,確保每列保持原子性。

第二範式,確保表中的每列都和主鍵相關。

第二範式,在第一範式的基礎之上更進一層。第二範式需要確保數據庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。也就是說在一個數據庫表中,一個表中只能保存一種數據,不可以把多種數據保存在同一張數據庫表中。

第三範式,確保每列都和主鍵列直接相關,而不是間接相關。

比如在設計一個訂單數據表的時候,可以將客戶編號作為一個外鍵和訂單表建立相應的關係。而不可以在訂單表中添加關於客戶其它信息(比如姓名、所屬公司等)的字段。

SQL與NoSql的優缺點以及使用場景分析

SQL (Structured Query Language) 數據庫,指關係型數據庫 - 主要代表:SQL Server,Oracle,MySQL(開源),PostgreSQL(開源)。

NoSQL(Not Only SQL)泛指非關係型數據庫 -。主要代表:MongoDB,Redis,Memcached,Hbase,CouchDB。

目前許多大型互聯網項目都會選用MySQL(或任何關係型數據庫) + NoSQL的組合方案。

關係型數據庫適合存儲結構化數據,如用戶的帳號、地址:

1)這些數據通常需要做結構化查詢,比如join,這時候,關係型數據庫就要勝出一籌

2)這些數據的規模、增長的速度通常是可以預期的

3)事務性、一致性

NoSQL適合存儲非結構化數據,如文章、評論:

1)這些數據通常用於模糊處理,如全文搜索、機器學習

2)這些數據是海量的,而且增長的速度是難以預期的

3)根據數據的特點,NoSQL數據庫通常具有無限(至少接近)伸縮性

4)按key獲取數據效率很高,但是對join或其他結構化查詢的支持就比較差

關係式數據庫必備

事務(ACID、工作原理、事務的隔離級別、鎖、事務的傳播機制)

數據庫創建,權限分配,表的創建,增刪改查,連接,子查詢

索引

數據庫索引好比是一本書前面的目錄,能加快數據庫的查詢速度。索引分為聚簇索引和非聚簇索引兩種,聚簇索引 是按照數據存放的物理位置為順序的,而非聚簇索引就不一樣了;聚簇索引能提高多行檢索的速度,而非聚簇索引對於單行的檢索很快。

還有觸發器、存儲過程、事務控制等

數據庫性能優化

索引原理及適用,大表查詢優化,多表連接查詢優化,子查詢優化等

大數據方案

分庫、分表、備份、遷移

導入,冷備熱備,主從備份、雙機熱備、縱向擴展、橫向擴展等這些都是屬於比較常見的數據庫方案,我在之前的文章淘寶具體挑戰性的一次架構演變中,談到了數據庫縱向和橫向的發展策略,裡面有詳細的方案。

java相關的框架與必備工具

從程序員進階到架構師,史上最全進階詳解(中篇)-架構擴展篇

web開發框架

Struts2,SpringMVC,spring(IoC、AOP等)

持久化:hibernate/MyBatis

推薦SSM組合(springMVC+Sping+Mybatis)

在搭建日誌:Log4j,以及單元測試:JUnit

構建工具

Maven Nexus,推薦自己動手搭建一套nexus以及配置maven

模板引擎

Velocity、FreeMaker等

消息隊列

ActiveMQ、RabbitMQ等

負載均衡

Nginx/HaProxy

Web服務器

Tomcat、JBoss、Jetty、Resin、WebLogic、WebSphere等

推薦在eclipse裡集成run-jetty-run插件,可以在開發環境實行熱部署,高效開發必備

java常用通信協議以及比較

RMI,Hessian,Burlap,Httpinvoker,WebService(cxf的soap、restful協議)

分佈式緩存

Redis、Memcached等,緩存在大型網站的架構中也是重中之重,特別是分佈式緩存和分佈式文件存儲系統,起著了天然數據庫端的防線作用。

分佈式文件存儲和大數據

常見的分佈式文件系統有,GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS、FastDFS等。

GFS(Google File System)

Google公司為了滿足本公司需求而開發的基於Linux的專有分佈式文件系統。。儘管Google公佈了該系統的一些技術細節,但Google並沒有將該系統的軟件部分作為開源軟件發佈。

下面分佈式文件系統都是類 GFS的產品。

HDFS(Hadoop Distributed File System)

Hadoop 實現了一個分佈式文件系統,簡稱HDFS。 Hadoop是Apache Lucene創始人Doug Cutting開發的使用廣泛的文本搜索庫。它起源於Apache Nutch,後者是一個開源的網絡搜索引擎,本身也是Luene項目的一部分。Aapche Hadoop架構是MapReduce算法的一種開源應用,是Google開創其帝國的重要基石。

TFS(Taobao File System)

TFS是淘寶針對海量非結構化數據存儲設計的分佈式系統,構築在普通的Linux機器集群上,可為外部提供高可靠和高併發的存儲訪問,最初了為了解決淘寶大量小文件的存儲早期限制在1M內,現在已經加入大文件的存儲。淘寶的TFS其實本身就是從GFS借鑑而來,所以名字也很像。

工作流

Activity、JBPM

搜索引擎

lucene,基於lucene封裝的solr

以上,上篇和中篇,講解到了數據結構和算法,Java編程語言掌握,Java web核心技術,數據庫設計和大數據方案,Java相關的框架與必備工具等五大環節。

最後一篇,將重點講解最後一環節,系統架構設計,涉及到架構設計以的策略以及大型網站的架構方案,從負載均衡的開始,到web服務器集群和搭建,再到中間應用服務器集群以及中間件搭建(分佈式緩存,分佈式存儲等)的架構設計方案,再到後端數據庫端的策略,一份完整的大型網站系統架構設計方案

相關推薦

推薦中...