软考系统架构师笔记-案例分析重点(二)
系統(tǒng)架構設計非功能需求主要有4類:操作性需求、性能需求、安全性需求、文化需求;
性能需求:響應時間、吞吐量、準確性、有效性、資源利用率、系統(tǒng)完成任務效率等。可靠性、可用性等指標也能歸此類。
安全性需求:系統(tǒng)向合法用戶提供服務并阻止非授權用戶使用服務方面的系統(tǒng)需求。
操作性需求:與用戶操作使用相關的需求。
文化需求:帶有文化背景因素的需求需求。
?
DFD(Data Flow Diagram)數(shù)據(jù)流圖。
ERD(Entity Relationship Diagram)實體關系圖簡稱ER圖。
?
信息工程方法中的“實體”和面向對象的類(class)的不同:實體為數(shù)據(jù)建模,類為面向對象建模。實體只有屬性,類有屬性及操作。
Essential Use Cases和Real Use Cases不同:Essential Use Cases為抽象建模,Real Use Cases為基礎建模,區(qū)別為:基礎用例是用戶需求對應關系的用例,是從用戶需求中得到的,抽象用例是從基礎用例中抽取的公共用例,避免重復工作,優(yōu)化結構而提出的用例。
?
分布式數(shù)據(jù)庫緩存技術在內存中管理數(shù)據(jù)并提供數(shù)據(jù)的一致性保障,采用數(shù)據(jù)復制技術實現(xiàn)高可用性,具有較優(yōu)的擴展性與性能組合。這種數(shù)據(jù)存儲機制,實現(xiàn)了更短的響應時間,同時極大的降低數(shù)據(jù)庫的事務處理負載,極好的解決了大量流情況下數(shù)據(jù)庫服務器和Web服務器之間的瓶頸。
MemCache:支持簡單的key/value結構,有持久性,不支持分布式存儲,支持多線程,有內存管理,不支持事物。
Redis:支持Key/value,list,set,hash,sorted等類型,無持久性,分布式存儲方式有多種如主從、Sentinel、Cluster等,不支持內存,無內存管理,支持事務。
MemCache工具存在的問題:
? ? ? ? ? 1. MemCache不支持數(shù)據(jù)持久化操作,掉電會丟失,復發(fā)恢復,可靠性存在問題;
? ? ? ? ? 2. 不支持事務操作,操作過程中可能出現(xiàn)數(shù)據(jù)不一致問題。
Redis與原有關系數(shù)據(jù)庫的數(shù)據(jù)同步方案:讀取時先讀取Redis中的數(shù)據(jù),如果沒有,就從原數(shù)據(jù)庫中讀取,并同步更新Redis數(shù)據(jù)庫。寫回時先寫回原數(shù)據(jù)庫再寫到Redis中。
Redis分布式存儲的2種常見方案:主從方案、Cluster方案
Redis集群切片的幾種常見方式:
? ? ? ? ? 1. 客戶端分片:在客戶端通過key的hash值對應到不同的服務器。
? ? ? ? ? 2. 對數(shù)據(jù)key散列到不同的slot上,不同slot對應不同的服務器。
?
SOA(面向服務的架構):是一個組建模型,它將應用程序的不同功能單元(稱為服務)通過這些服務之間定義良好的接口和契約聯(lián)系起來。接口采用中立的方式進行定義,他應該獨立與實現(xiàn)服務的硬平臺、操作系統(tǒng)和編程語言。這使得構建在各種各樣的系統(tǒng)中的服務以一種統(tǒng)一和通用的方式進行交互。
ESB(企業(yè)服務總線)在SOA的作用和特點:
? ? ? ? ? ? 1. 支持SOA的關鍵是其消息傳遞架構-企業(yè)服務器總線(ESB)。ESB用于實現(xiàn)企業(yè)應用不同消息和信息的準確、高效、安全傳遞。
? ? ? ? ? ? 2. 面向服務的元數(shù)據(jù)管理:必須了解被他中介的兩端,技術服務的請求以及請求者對服務的要求,以及服務的提供者和他所掌握的服務描述。
? ? ? ? ? ? 3. 通信:服務的發(fā)布/訂閱、響應/請求、同步/異步消息、路由和尋址等。
? ? ? ? ? ? 4. 服務交互:服務接口定義,服務實現(xiàn)的置換,服務消息模型,服務目錄和發(fā)現(xiàn)等。
? ? ? ? ? ? 5. 服務安全:認證和授權、不可否認和機密性、安全標準的支持等。
3中可實現(xiàn)信息系統(tǒng)安全保障的措施:
? ? ? ? ? ? 1. 釆用請求/應答的認證機制,防止重放攻擊。
? ? ? ? ? ? 2. 釆用加密技術保證信息在網(wǎng)絡傳輸過程的安全。
? ? ? ? ? ? 3. 釆用數(shù)字簽名技術保證信息傳輸過程的完整性和不可否認。
MVC為:model、view、controller
視圖(View):視圖是用戶看到并與之交互的界面。視圖向用戶顯示相關的數(shù)據(jù),并能接收用戶的輸入數(shù)據(jù),但是它并不進行任何實際的業(yè)務處理。
控制器(Controller):控制器接受用戶的輸入并調用模型和視圖去完成用戶的需求。該部分是用戶界面與Model的接口。一方面它解釋來自于視圖的輸入,將其解釋成為系統(tǒng)能夠理解的對象,同時它也識別用戶動作,并將其解釋為對模型特定方法的調用;另一方面,它處理來自于模型的事件和模型邏輯執(zhí)行的結果,調用適當?shù)囊晥D為用戶提供反饋。
模型(Model):模型是應用程序的主體部分。模型表示業(yè)務數(shù)據(jù)和業(yè)務邏輯。一個模型能為多個視圖提供數(shù)據(jù)。
與瀏覽器緊鄰的是JSP、Servlet;通過Servlet再與后臺交互;Service與DAO交互;DAO在與數(shù)據(jù)庫緊鄰。
EJB中的Bean分為三類消息:Session Bean(會話Bean)、Entity Bean(實體Bean)和Message-Driven Bean(消息驅動Bean)。
Session Bean:維持一個短暫的會話;
Entity Bean:維護一行持久穩(wěn)固的數(shù)據(jù);
Message-Driven Bean:異步接受消息。
數(shù)據(jù)庫程序在線訪問方式:把SQL語言寫到程序中訪問數(shù)據(jù)庫。
ORM(Object-Relational Mapping):在關系型數(shù)據(jù)庫和對象之間存在一個映射,不用和復雜的SQL語句打交道,只要操作對象即可。
數(shù)據(jù)庫程序在線訪問的優(yōu)勢:
? ? ? ? ? 1. 性能比ORM好。
? ? ? ? ? 2. 可以處理復雜的查詢語句。
數(shù)據(jù)庫程序在線訪問缺點:
? ? ? ? ? 1. 程序員對SQL語句有要求;
? ? ? ? ? 2. 修改與維護困難。
ORM優(yōu)點:
? ? ? ? ? 1. 使用ORM可以降低學習開發(fā)成本;
? ? ? ? ? 2. 不需要寫SQL來對數(shù)據(jù)庫進行操作;
? ? ? ? ? 3. 減少了程序代碼量;
? ? ? ? ? 4. 降低SQL代碼質量帶來的影響;
ORM缺點:
? ? ? ? ? 1. 不容易處理復雜的語句;
? ? ? ? ? 2. 性能比直接用SQL差。
抽象工廠:提供一個接口創(chuàng)建一系列相關或相互依賴的對象,無需指定它們具體的類。優(yōu)點是方便創(chuàng)建一系列對象。
響應式web設計:根據(jù)用戶的行為和不同設備環(huán)境做出相應的響應來調整頁面的布局,提供用戶可感知、流暢的閱讀和體驗。
實現(xiàn)方式:
? ? ? ? ? 1. 流式布局(flex);
? ? ? ? ? 2. 彈性布局加媒體查詢(@media screen an (min-width:768px){});
?
PHP對比Java的不足:
? ? ? ? ? 1. PHP是簡單的分布式二層或三層架構,Java可以實現(xiàn)多層網(wǎng)絡架構。數(shù)據(jù)庫層(持久化層)、應用(業(yè)務)邏輯層、表示邏輯層分開,且java在不同的層,都有成熟的框架支持。
? ? ? ? ? 2. PHP面向過程,Java面向對象,PHP只注重業(yè)務流程的變化,可修改性,復用性不好。
? ? ? ? ? 3. PHP可靠性比J2EE平臺差。
? ? ? ? ? 4. PHP對于不同的數(shù)據(jù)庫要采用不同的接口,Java通過JDBC通過調用不同的驅動完成對數(shù)據(jù)庫的操作,接口統(tǒng)一。
? ? ? ? ? 5. PHP適合小項目;
? ? ? ? ? 6. PHP維護性比Java差;
? ? ? ? ? 7. PHP擴展性比Java差;
? ? ? ? ? 8. PHP安全性比Java差。
應用服務器:通過各種協(xié)議把商業(yè)邏輯曝光給客戶端程序;
如何保證系統(tǒng)在大負荷和長時間運行下的穩(wěn)定及可擴展性:
? ? ? ? ? 1. 負荷大,可以部署多態(tài)服務,多臺應用服務器分擔任務。
? ? ? ? ? 2. 通過靈活的增加服務器完成擴展。
? ? ? ? ? 3. 當一臺服務器出故障時,將當前運行的事務轉移到正常的應用服務器上執(zhí)行,從而提高穩(wěn)定性和可靠性。
?
總結
以上是生活随笔為你收集整理的软考系统架构师笔记-案例分析重点(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++笔记-ClassA a和Class
- 下一篇: 使用C++控制台程序或Python调用D