本文作者,陳睿 優知學院創始人,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服務器集群和搭建,再到中間應用服務器集群以及中間件搭建(分佈式緩存,分佈式存儲等)的架構設計方案,再到後端數據庫端的策略,一份完整的大型網站系統架構設計方案。