《Java EE網際網路輕量級框架整合開發》讀書筆記
2017年12月13日
前言
其實一直在IT相關領域幹了這麼久,讀了這本書的前言才明白網際網路系統和傳統的管理系統的區別:
移動網際網路的新要求:
----高併發
----高響應
----資料一致性
----技術複雜化:在網際網路中流行許多新技術,比如常見的NoSQL(Redis、MongoDB),又如MQ、RPC框架、ZooKeeper、大資料,分散式等技術。
Spring的核心是IoC(控制反轉),他是一個大容器,方便組裝和管理各類系統內外部的資源,同時支援AOP(面向切面程式設計),這是對物件導向的補充,目前廣泛用於日誌和資料庫事務控制減少了大量的重複程式碼,使得程式更為清晰。
NoSQL的成功在於,首先它是基於記憶體的,也就是資料存放在記憶體中,而不是像資料庫那樣把資料放在磁碟上,而記憶體的讀取速度是磁碟速度的幾十倍到上百倍,所以NoSQL工具的速度遠比資料庫讀取速度要快得多,滿足了高響應的要求。即使NoSQL將資料放到磁碟中,它也是一種半結構化的資料格式,讀取到解析的複雜度遠比資料庫要簡單,這是因為資料庫儲存是經過結構化、多正規化等有複雜規則的資料,還原為記憶體結構的速度較慢。NoSQL在很大程度上滿足了高併發、快速讀寫響應。
第 一 章 認識SSM框架和Redis
它的成功來源於理念,而不是技術本身,它的理念包括IoC(Inversion of Control)和AOP(Aspect Oriented Programming)。
第 九 章 Spring IoC的概念
它的成功來源於理念,而不是技術本身,它的理念包括IoC(Inversion of Control)和AOP(Aspect Oriented Programming)。
實現IoC的方式有依賴查詢、依賴注入(構造器注入、setter注入、介面注入(其實一直沒有明白什麼是介面注入JNDI))、依賴拖拽;實現AOP的攔截功能的方式:使用ProxyFactoryBean和對應的介面實現AOP、使用XML配置AOP、使用@AspectJ註解驅動切面、使用AspectJ注入切面。
Spring從2004年第一個版本至今已經十多年了。
裝配Bean的方式:在XML中顯示配置、在Java的介面和類中實現配置、隱式Bean的發現機制和自動裝配原則。
第十一章
Spring對AOP的支援,在Spring中有四種方式去實現AOP的攔截功能。使用ProxyFactoryBean和對應的介面實現AOP、使用XML配置AOP、使用@AspectJ註解驅動切面、使用AspectJ注入切面。
第十二章
Spring最重要的功能毫無疑問就是運算元據。資料庫的程式設計是網際網路程式設計的基礎,Spring為開發者提供了JDBC模板模式,那就是它自身的JdbcTemplate,它可以簡化許多程式碼的程式設計,但是在實際工作中JdbcTemplate並不常用。
Spring還提供了TransactionTemplate支援事務的模板,只是這些都不是常用技術,對於持久層,工作中更多的時候用的是Hibernate框架和MyBatis框架。Spring並不去代替已有框架的功能,而是以提供模板的形式給予支援。(這裡說得很好,Spring是讓已有的好的元件都能很好的接入到Spring框架)
Spring最重要的功能毫無疑問就是運算元據。JDBC程式碼有太多的try……catch……finally……語句,導致程式碼可讀性和可維護性。如果你用得好JDBC,其效能最好的,但是太多的try……catch……finally……語句需要處理,資料庫資源的開啟、關閉都是定性的,甚至大部分情況下,只要發生一場資料庫的事物就會回滾,否則就提交,二者都是比較固定的模式。在Spring沒有出現之前,許多開發者在JDBC中濫用著try……catch……finally……語句導致程式碼可讀性和可維護性幾句下降,從而引發信任問題。為了解決這些問題,Spring提供了自己的方案,那就是JdbcTemplate模板。
在Spring中大部分都會配置成資料庫連線池,既可以使用Spring內部提供的類,也可以使用第三方資料庫連線池或者從WEB伺服器中通過JDNI獲取資料來源。
資料庫連線池
配置簡單的資料庫連線池(Spring自帶的資料庫資源)
配置第三方的資料庫連線池(C3P0 DBCP DRUID)
jndi資料庫連線池
MapperFactoryBean的配置,
MyBatis的執行只需要提供類似於RoleMapper.java的介面,而無需提供一個實現類。通過學習MyBatis執行原理,可以知道它是由MyBatis體系建立的動態代理物件執行的,所以Spring也沒有辦法為其生成實現類,所以MyBatis-Spring就提供了MapperFactoryBean
當使用一個Mapper介面的方法,它就會產生一個新的SqlSession,執行完成後就會自動關閉。
第十三章
本章先討論Spring資料庫的事務應用,然後討論Spring中最著名的註解之一-----@Transactional。搞清楚註解@Transactional概念不是那麼容易的事情,因為這會涉及到資料庫的各種概念,為此有必要先從資料庫談起,這樣有利於理解它的配置內容。它的隔離級別和傳播行為等抽象概念。
大部分情況下,我們會認為資料庫事務要麼同時成功,要麼同時失敗,但是存在著不同的要求。比如銀行的信用卡還款,有個跑批量的事務,而這個批量事務又包含了對各個信用卡的還款業務的處理,我們不能因為其中一張卡的事務的失敗了,而把所有卡的事務也回滾,這樣就會導致因為一個客戶的一場,造成多個客戶的還款失敗,即正常還款的使用者,也被認為是不正常還款的,這樣會引發嚴重的金融信譽問題,Spring事務的傳播行為帶來了比較方便的解決方案。
第十七章 Redia概述
第二十二章 高併發業務
網際網路存在的一些高併發的例項:瘋狂搶手機 春運買火車票 搶紅包。
網際網路的開發包括Java後臺、NoSQL、資料庫、限流、CDN、負載均衡等內容,甚至可以說目前並沒有權威性的技術和設計,有的只是長期的經驗的總結,使用這些技術經驗可以有效優化系統,提高系統的併發能力。
其實請求來到伺服器前需要先通過防火牆(firewall),這裡的防火牆的準確定義其實沒有很好的理解?
正如沒有完美的程式一樣,也不會有完美的架構。
負載均衡:
對業務請求做初步的分析,決定分不分發請求到Web伺服器,這就好比一個把控的關卡,常見的分發軟體比如Nginx和Apache等反向代理伺服器,它們在關卡處可以通過配置禁止一些無效的請求,比如封禁經常作弊的IP地址,也可以使用Lua、C語言聯合NoSQL快取技術進行業務分析,這樣就可以初步分析業務,決定是否需要分發到伺服器。
提供路由演算法,它可以提供一些負載均衡演算法,根據各個伺服器的負載能力進行合理分發,每一個Web伺服器得到比較均衡的請求,從而降低單個伺服器的壓力,提高系統的相應能力。
限流,對於一些高併發時刻,如雙十一,新產品上線,需要通過限流來處理,因為可能某個時刻通過上述的演算法讓有效請求過多到達伺服器,使得一些Web伺服器或者資料庫伺服器產生當機。持續的當機會造成連續的伺服器雪崩。負載均衡器有限流演算法,對於請求過多的時刻,可以告知使用者系統繁忙,請稍後再試,從而保證系統持續可用。
系統完成可以在負載均衡器中進行初步鑑別業務請求,使得一些不合理的業務請求在進入Web伺服器之前就排除掉,而為了應付複雜的業務,可以把業務儲存在NoSQL(往往是Redis)上,通過C語言或者Lua語言進行邏輯判斷,它們的效能比Web伺服器判斷的效能要快速得多,通過這些簡單的判斷就能夠快速發現無效請求,並把它們拍的虎在Web伺服器之外,從而降低Web伺服器的壓力,提高網際網路系統的相應速度。
資料庫設計:對於資料庫的設計而言,為了得到高效能,可以使用分表或分庫技術,從而提高系統的響應能力。
高併發系統的分析和設計
任何系統都不是獨立於業務進行的,真正的系統是為了實現業務而開發的,所以開發高併發網站搶購時,都應該先分析業務需求和實際的場景,在完善這些需求之後才能進入系統開發階段。沒有對業務進行分析就貿然開發系統是開發者大忌。
對於業務分析,首先分析有效請求和無效請求
系統設計
水平分發(個模組通過RPC相互訪問:DubboThrift Hessian)
垂直分發
水平和垂直結合分發
資料庫設計
分表分庫 -> 優化SQL語句 ->讀寫分離技術,進行進一步的優化,這樣就可以有一臺主機負責寫業務,一臺或者多臺備機負責讀業務,有助於效能的提高->對於分散式資料庫而言,還會有另外一個麻煩,就是事務的一致性,事務的一致性比較複雜,目前流行的有兩段提交協議,即XA協議、Paxos協議。
動靜分離技術
鎖和高併發
相關文章
- 《大型網際網路企業安全架構》讀書筆記架構筆記
- 《網際網路信貸風險與大資料》讀書筆記(二)大資料筆記
- 《網際網路信貸風險與大資料》讀書筆記(一)大資料筆記
- 《網際網路信貸風險與大資料》讀書筆記(五)大資料筆記
- 《網際網路信貸風險與大資料》讀書筆記(六)大資料筆記
- 《網際網路信貸風險與大資料》讀書筆記(三)大資料筆記
- 《網際網路信貸風險與大資料》讀書筆記(四)大資料筆記
- 《結網 網際網路產品經理改變世界》讀書筆記筆記
- core_framework —— 基於libev的輕量級lua網路開發框架Framework框架
- Web 開發學習筆記——關於網際網路和網際網路應用Web筆記
- 《52講輕鬆搞定網路爬蟲》讀書筆記 - Session和Cookie爬蟲筆記SessionCookie
- 網際網路開發常用概念書目錄
- 《計算機網路》讀書筆記(二)計算機網路筆記
- 《網路和多媒體》讀書筆記筆記
- hibernate《輕量級框架應用與開發--S2SH》筆記框架筆記
- 輕量級神經網路:ShuffleNetV2解讀神經網路
- 網際網路級別的RPC框架:谷歌的gRPC開源框架RPC框架谷歌
- 《網路是怎樣連線的》讀書筆記筆記
- 《圖解TCP/IP》讀書筆記九:網路安全圖解TCP筆記
- 網路是怎樣連線的(讀書筆記)筆記
- 《現代通訊網路技術》讀書筆記筆記
- 搭建基於springboot輕量級讀寫分離開發框架Spring Boot框架
- Solon & Solon Cloud 1.5.62 釋出,輕量級 Java 基礎開發框架CloudJava框架
- 輕量級 Java 基礎開發框架,Solon & Solon Cloud 1.5.48 釋出Java框架Cloud
- 輕量級 Java 基礎開發框架,Solon & Solon Cloud 1.5.40 釋出Java框架Cloud
- 網際網路方向的Java開發工程師Java工程師
- 一個輕量級WebFramework開發框架介紹WebFramework框架
- 敏捷開發讀書筆記——隨筆敏捷筆記
- 你憑什麼做好網際網路 --讀書心得
- 從MobileNet看輕量級神經網路的發展神經網路
- 谷歌開源TFGAN:輕量級生成對抗網路工具庫谷歌
- 網際網路輕量級框架SSM-查缺補漏第七天(MyBatis的解析和執行原理框架SSMMyBatis
- 《網路是怎樣連線的》讀書筆記一筆記
- 讀書筆記之《網路是怎樣連線的》筆記
- java併發筆記之synchronized 偏向鎖 輕量級鎖 重量級鎖證明Java筆記synchronized
- 一個工業級、跨平臺、輕量級的 tcp 網路服務框架:geventTCP框架
- PhalApi(π框架) - PHP輕量級開源介面框架API框架PHP
- 適合移動端的輕量級網路