taotao總結

大概學習完taotao商城後的總結和記錄。php

1、歸納css

       taotao商城使用的是SSM技術,也就是持久層---MyBatis、業務層---Spring、表現層---SpringMVC。項目爲maven工程,使用分佈式結構,按照功能把系統拆分紅獨立的模塊。單獨爲某一個節點添加服務器,須要系統之間配合才能完成整個業務邏輯爲不一樣的模塊項目。每一個模塊的結構大體相同,表現層工程中(使用Controller標記)注入(Autowired)service,配置文件爲SpringMVC.xml。業務工程(使用Service標記)中實現接口(interface)模塊,注入mapper,其配置文件爲mybatis---SqlMapConfig.xml,properties---db.properties(數據庫相關),spring---(applicationContext-activemq.xml某些工程會用到)、applicationContext-dao.xml(掃描mapper包)、applicationContext-service.xml(Dubbo中暴露服務接口)、applicationContext-transaction.xml(事務管理、配置通知、配置切面)。數據庫(使用阿里的Druid鏈接池)對應的pojo類和mapper映射(dao)由逆向工程生成。(MVC實際上是表現層和業務層的功能組件,M屬於業務層,VC屬於表現層,其大部分用來處理表現層。)前端

【 SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis兩個開源框架整合而成(SpringMVC是Spring中的部份內容)。 常做爲數據源較簡單的web項目的框架。nginx

  分佈式架構:多個子系統相互協做才能完成業務流程。系統之間須要進行通訊。web

   集羣:同一個工程部署到多臺服務器上(單臺服務器---節點)。redis

  分佈式架構:spring

  把系統按照模塊拆分紅多個子系統。sql

  優勢:數據庫

  1. 把模塊拆分,使用接口通訊,下降模塊之間的耦合度。
  2. 把項目拆分紅若干個子項目,不一樣的團隊負責不一樣的子項目。
  3. 增長功能時只須要再增長一個子項目,調用其餘系統的接口就能夠。
  4. 能夠靈活的進行分佈式部署。

 

 缺點:json

    一、系統之間交互須要使用遠程通訊,接口開發增長工做量。

    二、各個模塊有一些通用的業務邏輯沒法共用。】

 

基於SOA架構,表現層和服務層是不一樣的工程。因此須要兩個系統之間的通訊。

每一個模塊的結構大體相同,表現層工程中(使用Controller標記)注入(Autowired)service,配置文件爲SpringMVC.xml。業務工程(使用Service標記)中實現接口(interface)模塊,注入mapper,其配置文件爲mybatis---SqlMapConfig.xml,properties---db.properties(數據庫相關),spring---(applicationContext-activemq.xml某些工程會用到)、applicationContext-dao.xml(掃描mapper包)、applicationContext-service.xml(Dubbo中暴露服務接口)、applicationContext-transaction.xml(事務管理、配置通知、配置切面)。(序列化的目的依賴爲了進行網絡傳輸,確保傳過去的字節流還能被反編譯找到對應的類,二來爲了方便本地硬盤存儲。)

【SOA:Service Oriented Architecture面向服務的架構。也就是把工程拆分紅服務層、表現層兩個工程。服務層中包含業務邏輯,只須要對外提供服務便可。表現層只須要處理和頁面的交互,業務邏輯都是調用服務層的服務來實現。

  如何實現遠程通訊?

  1. 使用WebService:效率不高,它是基於soap協議(http+xml)。項目中不推薦使用。
  2. 使用restful形式的服務:http+json。不少項目中應用。若是服務愈來愈多,服務與服務之間的調用關係複雜,調用服務的URL管理複雜,何時添加機器難以肯定。
  3. 使用dubbo。使用rpc協議進行遠程調用,直接使用socket通訊。傳輸效率高,而且能夠統計出系統之間的調用關係、調用次數,管理服務。】

     

​結構

2、Dubbo

【系統間通訊】

       (1)DUBBO是一個分佈式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,是阿里巴巴SOA服務化治理方案的核心框架,天天爲2,000+個服務提供3,000,000,000+次訪問量支持,並被普遍應用於阿里巴巴集團的各成員站點。隨着互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已沒法應對,分佈式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。

  • 單一應用架構
    • 當網站流量很小時,只需一個應用,將全部功能都部署在一塊兒,以減小部署節點和成本。
    • 此時,用於簡化增刪改查工做量的 數據訪問框架(ORM) 是關鍵。
  • 垂直應用架構
    • 當訪問量逐漸增大,單一應用增長機器帶來的加速度愈來愈小,將應用拆成互不相干的幾個應用,以提高效率。
    • 此時,用於加速前端頁面開發的 Web框架(MVC) 是關鍵。
  • 分佈式服務架構
    • 當垂直應用愈來愈多,應用之間交互不可避免,將核心業務抽取出來,做爲獨立的服務,逐漸造成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。
    • 此時,用於提升業務複用及整合的 分佈式服務框架(RPC) 是關鍵。
  • 流動計算架構
    • 當服務愈來愈多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增長一個調度中心基於訪問壓力實時管理集羣容量,提升集羣利用率。
    • 此時,用於提升機器利用率的 資源調度和治理中心(SOA) 是關鍵。

 

Dubbo就是資源調度和治理中心的管理工具。

 

(2)Dubbo 就是相似於webservice的關於系統之間通訊的框架,並能夠統計和管理服務之間的調用狀況(包括服務被誰調用了,調用的次數是如何,以及服務的使用情況)。

 

節點角色說明:

  • Provider: 暴露服務的服務提供方。
  • Consumer: 調用遠程服務的服務消費方。
  • Registry: 服務註冊與發現的註冊中心。
  • Monitor: 統計服務的調用次調和調用時間的監控中心。
  • Container: 服務運行容器。

 (3)使用方法

Spring配置下

Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置便可,Dubbo基於Spring的Schema擴展進行加載。

單一工程中spring的配置local.xml

<bean id="xxxService" class="com.xxx.XxxServiceImpl" />

<bean id="xxxAction" class="com.xxx.XxxAction">

        <property name="xxxService" ref="xxxService" />

</bean>

遠程服務:

在本地服務的基礎上,只需作簡單配置,便可完成遠程化:

將上面的local.xml配置拆分紅兩份,將服務定義部分放在服務提供方remote-provider.xml,將服務引用部分放在服務消費方remote-consumer.xml。

並在提供方增長暴露服務配置<dubbo:service>,在消費方增長引用服務配置<dubbo:reference>。

服務層發佈服務:

<!-- 和本地服務同樣實現遠程服務 -->

<bean id="xxxService" class="com.xxx.XxxServiceImpl" />

<!-- 增長暴露遠程服務配置 -->

<dubbo:service interface="com.xxx.XxxService" ref="xxxService" />

表現層調用服務:

<!-- 增長引用遠程服務配置 -->

<dubbo:reference id="xxxService" interface="com.xxx.XxxService" />

<!-- 和本地服務同樣使用遠程服務 -->

<bean id="xxxAction" class="com.xxx.XxxAction">

        <property name="xxxService" ref="xxxService" />

</bean>

(4)註冊中心---zookeeper

【zookeeper作服務層的負載均衡】

zookeeper的介紹

         zookeeper翻譯成動物園管理員,他是用來管hadoop(大象)、Hive(蜜蜂)、pig(小豬)的管理員,這些「動物」都是一些項目, Apache Hbase和 Apache Solr 的分佈式集羣都用到了zookeeper;Zookeeper:是一個分佈式的、開源的程序協調服務,是hadoop項目下的一個子項目

Zookeeper它有幾個特點功能:

1)集中式的配置信息(數據庫的屬性文件,放在zookeeper中,修改後不用重啓也能生效)

2)自動容錯

3)近實時搜索

4)查詢時自動負載均衡

集羣管理

        在分佈式的集羣中,常常會因爲各類緣由,好比硬件故障,軟件故障,網絡問題,有些節點會進進出出。有新的節點加入進來,也有老的節點退出集羣。這個時候,集羣中其餘機器須要感知到這種變化,而後根據這種變化作出對應的決策。好比咱們是一個分佈式存儲系統,有一箇中央控制節點負責存儲的分配,當有新的存儲進來的時候咱們要根據如今集羣目前的狀態來分配存儲節點。這個時候咱們就須要動態感知到集羣目前的狀態。還有,好比一個分佈式的SOA架構中,服務是一個集羣提供的,當消費者訪問某個服務時,就須要採用某種機制發現如今有哪些節點能夠提供該服務(這也稱之爲服務發現,好比Alibaba開源的SOA框架Dubbo就採用了Zookeeper做爲服務發現的底層機制)。還有開源的Kafka隊列就採用了Zookeeper做爲Cosnumer的上下線管理。

註冊中心負責服務地址的註冊與查找,至關於目錄服務,服務提供者和消費者只在啓動時與註冊中心交互,註冊中心不轉發請求,壓力較小。使用dubbo-2.3.3以上版本,官方建議使用zookeeper做爲註冊中心。

Zookeeper是Apacahe Hadoop的子項目,是一個樹型的目錄服務,支持變動推送,適合做爲Dubbo服務的註冊中心,工業強度較高(穩定性好),可用於生產環境,並推薦使用。

【dubbo和zookeeper一塊兒管理服務層】

3、分頁插件---PageHelper

 

4、富文本編輯器

KindEditor

http://kindeditor.net/

UEditor:百度編輯器

http://ueditor.baidu.com/website/

CKEditor

http://ckeditor.com/

純js開發,跟後臺語言沒有關係。

第一步:在jsp中引入KindEditor的css和js代碼。

第二步:在表單中添加一個textarea控件。是一個富文本編輯器的載體。相似數據源。

第三步:初始化富文本編輯器。使用官方提供的方法初始化。

第四步:取富文本編輯器的內容。

表單提交以前,把富文本編輯器的內容同步到textarea控件中。

5、redis

【存儲首頁經常使用圖片、分類信息、用戶登錄信息並模擬session】

  1. 什麼是NoSql

        爲了解決高併發、高可擴展(集羣)、高可用(不能宕機)、大數據存儲問題而產生的數據庫解決方案,就是NoSql數據庫。

        NoSql  :全稱 not only sql ,非關係型數據庫。能夠做爲關係型數據庫的一個很好的補充。不能替代。

    2. 什麼是redis

        Redis是用C語言開發的一個開源的高性能鍵值對(key-value)數據庫(nosql),應用在緩存。它經過提供多種鍵值數據類型來適應不一樣場景下的存儲需求,目前爲止Redis支持的鍵值數據類型有5種。

以下:

字符串類型 (String) 、散列類型(hash)、列表類型(List)、集合類型(set)、有序集合類型(SortedSet)。

    3. redis的應用場景

        緩存。分佈式集羣架構中的session分離。任務隊列。(秒殺、搶購、12306等等)應用排行榜。(SortedSet)網站訪問統計。數據過時處理。(expire)

  4. Redis持久化方案

          Redis 數據都放在內存中。若是機器掛掉,內存的數據就不存在。

        須要作持久化,講內存中的數據保存在磁盤,下一次啓動的時候就能夠恢復數據到內存中。

        1.RDB (默認開啓)  快照形式  (按期將當前時刻的數據保存磁盤中)會產生一個dump.rdb文件

                特色:會存在數據丟失,性能較好,數據備份。

        2.AOF   append only file  (全部對redis的操做命令記錄在aof文件中),恢復數據,從新執行一遍便可。

                特色:每秒保存,數據比較完整,耗費性能。   

6、Solr

   中文分析器(IKAnalyzer2012FF_u1.jar)、solrJ管理索引庫(使用SolrJ能夠實現索引庫的增刪改查操做)

(1)SolrCloud(solr 雲)是Solr提供的分佈式搜索方案,當你須要大規模,容錯,分佈式索引和檢索能力時使用 SolrCloud。當索引量很大,搜索請求併發很高,這時須要使用SolrCloud來知足這些需求。

 SolrCloud是基於Solr和Zookeeper的分佈式搜索方案,它的主要思想是使用Zookeeper做爲集羣的配置信息中心。

7、ActiveMQ(消息隊列)

【項目使用:在修改商品後,須要自動更新索引庫。在修改商品處進行監聽,每當監聽到修改後,將消息發送給自動更新索引庫的項目】

(1)ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個徹底支持JMS1.1和J2EE 1.4規範的 JMS Provider實現,儘管JMS規範出臺已是好久的事情了,可是JMS在當今的J2EE應用中間仍然扮演着特殊的地位。

主要特色:

1. 多種語言和協議編寫客戶端。語言: Java, C, C++, C#, Ruby, Perl, Python, PHP。應用協議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP

2. 徹底支持JMS1.1和J2EE 1.4規範 (持久化,XA消息,事務)

3. 對Spring的支持,ActiveMQ能夠很容易內嵌到使用Spring的系統裏面去,並且也支持Spring2.0的特性

4. 經過了常見J2EE服務器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的測試,其中經過JCA 1.5 resource adaptors的配置,可讓ActiveMQ能夠自動的部署到任何兼容J2EE 1.4 商業服務器上

5. 支持多種傳送協議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA

6. 支持經過JDBC和journal提供高速的消息持久化

7. 從設計上保證了高性能的集羣,客戶端-服務器,點對點

8. 支持Ajax

9. 支持與Axis的整合

10. 能夠很容易得調用內嵌JMS provider,進行測試

(2)ActiveMQ的消息形式

對於消息的傳遞有兩種類型:

一種是點對點的(Queue),即一個生產者和一個消費者一一對應;

另外一種是發佈/訂閱模式(Topic),即一個生產者產生消息並進行發送後,能夠由多個消費者進行接收。

JMS定義了五種不一樣的消息正文格式,以及調用的消息類型,容許你發送並接收以一些不一樣形式的數據,提供現有消息格式的一些級別的兼容性。

  · StreamMessage -- Java原始值的數據流

  · MapMessage--一套名稱-值對

  · TextMessage--一個字符串對象

  · ObjectMessage--一個序列化的 Java對象

  · BytesMessage--一個字節的數據流

8、freemarker

【ActiveMQ進行監聽,商品添加後,生成靜態頁面】

(1)網頁靜態化

什麼是靜態化?

        經過一些技術手段(Freemarker/valocity)將動態的頁面(jsp,asp.net,php) 轉換成靜態的頁面,經過瀏覽器直接訪問靜態頁面。

爲何要靜態化?

        經過瀏覽器直接訪問靜態的頁面,不須要通過程序處理,它的訪問速度高。

        穩定性好。

        更有效的防止安全漏洞問題,好比不易遭受黑客攻擊。

        靜態的頁面更容易被搜索引擎收錄。

怎麼樣實現?

可使用freemarker實現網頁靜態化。

(2)FreeMarker是一個用Java語言編寫的模板引擎,它基於模板輸出文本。FreeMarker與Web容器無關,即在Web運行時,它並不知道Servlet或HTTP。它不只能夠用做表現層的實現技術,並且還能夠用於生成XML,JSP或Java 等。

9、Nginx

keepalive使得nginx高可用、nginx對錶現層作負載均衡

 詳見Nginx文章https://blog.csdn.net/qq_34480270/article/details/85112360

10、SSO系統

(1)SSO英文全稱Single Sign On,單點登陸。SSO是在多個應用系統中,用戶只須要登陸一次就能夠訪問全部相互信任的應用系統。它包括能夠將此次主要的登陸映射到其餘應用中用於同一個用戶的登陸的機制。它是目前比較流行的企業業務整合的解決方案之一。

(2)只用一個web工程時不用SSO就行。集羣環境下會出現要求用戶屢次登陸的狀況。

解決方案:

  1. 配置tomcat集羣。配置tomcatSession複製。節點數不要超過5個。
  2. 可使用Session服務器,保存Session信息,使每一個節點是無狀態。須要模擬Session。

單點登陸系統是使用redis模擬Session,實現Session的統一管理,解決Session的共享問題.

傳遞數據時使用的Jsonp(Ajax跨域請求)。

 

11、MyCat

           MyCat(能夠認爲是代理)是分佈式數據庫中間件,相似web服務器的Nginx。能夠實現分庫分表、讀寫分離、主備切換等功能。

(數據庫是對底層存儲文件的抽象,而Mycat是對數據庫的抽象。)

12、其餘性能提高方法

升級硬件、使用CDN。

 

技術用來解決項目開發中所遇到的問題!

相關文章
相關標籤/搜索