天天看點

《Java EE網際網路輕量級架構整合開發》總結

其實一直在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中最著名的注解之一[email protected]。搞清楚注解@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協定。

原文:https://blog.csdn.net/hipilee/article/details/78797473

繼續閱讀