Uber 進軍電動汽車分時租賃

優步(Uber)於2016年4月12日宣佈與武漢暢的科技達成戰略合作,並於全球探索「網路約租車+分時租賃」的雙平臺合作戰略,共建新能源汽車共用生態圈,首期合作將投放500台新能源汽車,為武漢市民提供全新綠色出行服務。

本次合作的新能源汽車則將由暢的科技提供,為優步司機提供低廉的租賃優惠價格,每天僅需100元(人民幣,下同)的租車費用即包含了保險、保養等全部成本,讓司機專注於服務。而租滿三年後,電動汽車還可贈送給優步司機繼續運營,從而降低司機購置成本,推動電動汽車普及。

本次專案的亮點是uber在全球採用與分時租賃相結合的方式,每輛電動汽車將同步接入uber和暢的分時租賃兩個平臺系統,平時司機通過接入uber平臺獲取派單,而在希望休息的時候,則可隨時切換到暢的電動汽車分時租賃平臺,將車輛為周邊的用戶提供按分鐘計費的共用租車服務,繼續賺取租車收益。這種做法將司機租賃的電動汽車利用率達到,極大的分攤了車輛閒置成本。

而困擾司機的充電問題也得到解決,暢的科技將為租賃新能源汽車的優步司機提供智慧充電樁,安裝在司機居住地停車位,為電動汽車提供夜間充電。而司機白天外出後,閒置狀態的電樁則可通過手機切換到公共充電共用平臺,通過為其他新能源車主提供充電服務的方式賺取充電收益,從而補貼自己的電費,甚至實現用電零成本。這種出現的由私人自用電樁共用形成的公共充電網路,使得任何電動汽車車主均可通過手機app找樁、掃碼充電、移動支付進行無人化自助充電,將極大緩解當前城市充電基礎設施不足的困難。

不僅如此,優步還將於與暢的聯手,共同打造多個司機專享充電+服務一體化網站,除了為新能源司機提供日常充電外,更提供10元商務套餐、免費飲料、免費休閒等系列服務,進一步提升司機的幸福指數。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

特斯拉:Model 3 不太可能如期交車

3 月 31 對外發表「親民平價」電動車 Model 3 後,下單數量暴增,特斯拉〈Tesla〉在短短一周後狂接 32.5 萬筆訂單,最近一次公布的數字更高達 40 萬筆訂單,如此驚人的數字,不僅打破電動車市場紀錄,也挑戰了車業過往的訂單紀錄。於此同時,外界也在質疑,特斯拉真能準時出貨交車嗎?   這個答案恐怕要讓已經下訂 Model 3 的消費者失望了。特斯拉執行長馬斯克〈Elon Musk〉於 5 月 4 日表示,原先預期 Model 3 第一批訂於 2017 年 7 月 1 日交車,但因車輛出廠牽扯到供應鏈是否能如期交單,以及組裝時間是否如預期,因此,「Model 3 不太可能如期交車」。   馬斯克指出,Model 3 的設計上,沒有其他現有車款 Model S 與 Model X 複雜,但能否準時交車,還是得仰賴生產零件的供應鏈端是否如期交貨,若供應鏈無法達到預期目標,特斯拉會在位於加州費利蒙〈Fremont〉的生產工廠自行製造所需零件。   馬斯克預期,2017 年 Model 3 的初期生產量將達 10 萬至 20 萬輛,且 2018 年產出將擴增至 50 萬輛。   此外,為了讓全球的出貨更有效率,馬斯克提到,等到位於加州費利蒙的工達到最大化生產,可能會考慮在中國或歐洲設廠點,以滿足各地的出貨需求。

(首圖來源:)

(本文授權轉載自《》─〈〉)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※想知道網站建置網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計後台網頁設計

※不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※帶您來看台北網站建置台北網頁設計,各種案例分享

※別再煩惱如何寫文案,掌握八大原則!

豐田概念電動汽車uBox:想要什麼可以自己定制

近日,豐田和克萊門森大學國際汽車研究中心合作,為下一代的司機創造出了一個全新的概念電動汽車——uBox。

豐田曾經發起了一個名為“Deep Orange”的合作專案,uBox正是項目的結晶。

據瞭解,豐田和克萊門森大學在過去的兩年裡一直致力於這款概念車的開發工作。uBox概念車使用了方形的設計、自動式車門,並用複合碳纖維和鋁合金支撐著一塊弧形玻璃。其全新設計的套件裝備均極大程度提升了整車的舒適性與功能性。

豐田表示汽車的內部配置可以根據司機的品味進行配置。座位安裝在導軌上,並且通風口、內飾、車內顏色方案都可以定制,可以下載新設計然後用3D印表機重新構建。它還擁有一個110伏的插座,可以為筆記型電腦等眾多設備充電。

至於動力系統方面,除了豐田將在uBox上搭載一台電動機引擎之外,目前並沒有獲得更多這方面的消息。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

使用.net core中的類DispatchProxy實現AOP

在軟件業,AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是軟件開發中的一個熱點,利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性。

比如說三層的調用:UI => BLL => DAL,正常來說我們會在UI層調用BLL層某個類的某個方法,然後BLL層某個類的某個方法又會調用DAL層某個類的某個方法,可以說通常情況下我們都是這麼乾的;如果說UI調BLL、BLL調DAL是縱向的話,那麼AOP就是橫向的,AOP可以做到在調用BLL層或DAL層任意方法之前之後做一些統一的邏輯處理。

AOP的典型應用場景:日誌記錄、權限驗證、異常處理、緩存等

目前,可以實現AOP的類庫也有很多,如下:

AspectCore
Unity
Castle DynamicProxy
Dora.Interception

 

但是在.net core中有DispatchProxy類(命名空間:System.Reflection),提供實例化代理對象和處理其方法調度的機制,藉助它我們可以自己實現AOP,直接看示例

 

定義一個消息接口IMessage,其中有一個發送消息Send和接收消息Receive的方法定義:

    public interface IMessage
    {
        void Send(string content);
        void Receive(string content);
    }

 

定義电子郵件類EmailMessage實現消息接口IMessage,實現使用电子郵件發送和接收消息:

    public class EmailMessage : IMessage
    {
        public void Send(string content)
        {
            Console.WriteLine("Send Email:" + content);
        }
        public void Receive(string content)
        {
            Console.WriteLine("Receive Email:" + content);
        }
    }

 

定義日誌攔截器LogDispatchProxy 繼承自DispatchProxy類,重寫基類Invoke方法並在目標方法調用前後加上所需業務邏輯;然後定義TargetClass屬性,該屬性是目標方法所屬類的實例

    public class LogDispatchProxy : DispatchProxy
    {
        public object TargetClass { get; set; }
        protected override object Invoke(MethodInfo targetMethod, object[] args)
        {
            Write("方法執行前");
            var result = targetMethod.Invoke(TargetClass, args);
            Write("方法執行后");
            return result;
        }

        private void Write(string content)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(content);
            Console.ResetColor();
        }
    }

 

使用:

    class Program
    {
        static void Main(string[] args)
        {
            //使用DispatchProxy類的靜態方法Create生成代理類,其中Create是個泛型方法,泛型有兩個值,第一個值必須是接口,第二個值必須是DispatchProxy的子類
            IMessage messageDispatchProxy = DispatchProxy.Create<IMessage, LogDispatchProxy>();
            //創建一個實現了IMessage接口的類的實例,並賦值給代理類的TargetClass屬性
            ((LogDispatchProxy)messageDispatchProxy).TargetClass = new EmailMessage();
            messageDispatchProxy.Send("早上好");
            Console.WriteLine("=======================================");
            messageDispatchProxy.Receive("中午好");

            Console.ReadKey();
        }
    }

 

執行結果

我的理解:通過DispatchProxy.Create創建的代理類messageDispatchProxy 就是一個LogDispatchProxy類,並且利用我們提供的的實例實現了IMessage接口,所以messageDispatchProxy可以強轉為LogDispatchProxy或IMessage

至此,我們沒有通過任何第三方類庫,自己實現了一個AOP

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

CSS(4)—三大特性(繼承性,層疊性,優先級)

CSS(4)—三大特性(繼承性,層疊性,優先級)

CSS有三大特性分別是: 繼承性層疊性優先級

一、繼承性

概念 給父元素設置一些屬性,子元素也可以使用,這個我們就稱之為繼承性。

注意

1.並不是所有的屬性都可以繼承, 只有以color/font-/text-/line-開頭的屬性才可以繼承
2.在CSS的繼承中不僅僅是兒子可以繼承, 只要是後代都可以繼承
3.繼承性中的特殊性
   3.1 a標籤的文字顏色和下劃線是不能繼承的
   3.2 h標籤的文字大小是不能繼承的

示例

<!-- 樣式部分 -->
<style type="text/css">
    .father { 
         width: 300px;            /*設置寬度*/
         font-size: 20px;         /* 設置字體*/
         text-align: right;       /* 字體右對齊*/
         background-color: green; /*背景顏色綠色*/
         color:red; /*字體顏色紅色*/
     }
 </style>
 
<!-- html部分 -->
 <body>
    <div class="father">father標籤
      <p>father子標籤 p</p>
    </div>
  </body>

運行結果

從這個例子中可以看齣子標籤p繼承了父類div的樣式。

二、層疊性

概念 層疊性就是CSS處理衝突的一種能力。層疊性只有在多個選擇器選中 同一個標籤, 然後又設置了相同的屬性, 才會發生層疊性。

示例

<html>
<head>
    <title>CSS三大特性之層疊性</title>
    <style>
        p {
            color: red;
        }
        p {
            color: blue;
        }
    </style>
</head>
<body>
  <p style="color: black">我是段落</p> <!-- 最終显示black 就近原則 black > blue > red -->
</body>
</html>

在相同優先級的的情況下 下面的樣式元素會將上面的層疊掉。

三、CSS優先級

概念 當多個選擇器選中同一個標籤, 並且給同一個標籤設置相同的屬性時, 如何層疊就由優先級來確定。

優先級

!important>行內樣式>id選擇器>類選擇器>標籤選擇器>通配符>繼承 

補充說明

1、繼承樣式的權重為0。即在嵌套結構中,不管父元素樣式的權重多大,被子元素繼承時,他的權重都為0,也就是說子元素定義的樣式會覆蓋繼承來的樣式。
2、行內樣式優先。應用style屬性的元素,其行內樣式的權重非常高,可以理解為遠大於100。
3、權重相同時,CSS遵循就近原則。也就是說靠近元素的樣式具有最大的優先級,或者說排在最後的樣式優先級最大。
4、CSS定義了一個!important命令,該命令被賦予最大的優先級。也就是說不管權重如何以及樣式位置的遠近,!important都具有最大優先級。

關於CSS權重,有一套計算公式來去計算,用一個四位的數 字串(CSS2是三位)來表示,更像四個級別,值從左到右,左面的最大,一級大於一級,數位之間沒有進制,級別之間不可超越。

部分權重是可以疊加的。比如的例子:

div ul  li   ------>      0,0,0,3
a:hover      -----—>      0,0,1,1
.son ul li   ------>      0,0,1,2
.son a       ------>      0,0,1,1   
#son p       ------>      0,1,0,1

注意

對於並集選擇器來說不是權重的加和,因為理論上它還是獨立的,它只相當於將多個選擇器的相同內容歸於一個並集選擇器中,理論上每一個選擇器還是獨立的。

示例

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        div,p {
            color: green; /*這裏不能是0,0,0,2 而是兩個0,0,0,1*/
        }

        p {
            color: red;  /*對於p標籤最終會显示紅色 0,0,0,1 (因為和上面優先級一樣,所以下面會覆蓋上面樣式)*/
        }
    </style>
</head>
<body>
    <p>標籤什麼顏色</p>
</body>
</html>

四、經典測試題

這裏舉幾個測試題來鞏固下css優先級的知識。首先我們要知道如何推斷標籤的最終樣式

1. 先找到影響文字的最裏面的盒子
2. 然後計算權重
3. 如果權重一樣,看層疊性

1、第一題

<!DOCTYPE>
<html>
    <head>
        <title>第2題</title>
        <style type="text/css">
            #father{
                color:red;  /* 繼承的權重為 0,0,0,0 */
            }
            p{
                color:blue;  /* 權重 0,0,0,1 */
            }
        </style>
    </head>
    <body>
        <div id="father">
            <p>試問這行字體是什麼顏色的?</p>
        </div>
    </body>
</html>

答案 藍色。

2、第二題

<!DOCTYPE>
<html>      
    <head>
        <title>第1題</title>
        <style type="text/css">
            #father #son{    /*權重: 0,2,0,0 */
                color:blue;
            }
            #father p.c2{   /* 權重: 0,1,1,1 */
                color:black;
            }
            div.c1 p.c2{    /* 權重 0,0,2,2 */
                color:red;
            }
            #father{
                color:green !important;  /* 繼承的權重為 0,0,0,0 */
            }
        </style>
    </head>
    <body>
        <div id="father" class="c1">
            <p id="son" class="c2">
                試問這行字體是什麼顏色的?
            </p>
        </div>
    </body>
</html>

答案 藍色。

3、第三題

<!DOCTYPE>
<html>
<head>
    <title>Document</title>
    <style type="text/css">
        div div div div div div div div div div div div{  /* 權重 0,0,0,11 (最後一位數再怎麼相加都不會向前進一位) */
            color:red;
        }
        .me{ 
            color:blue; /* 權重 0,0,1,0 */
        }
    </style>
</head>
<body>
    <div>
        <div>
            <div>
                <div>
                    <div>
                        <div>
                            <div>
                                <div>
                                    <div>
                                        <div>
                                            <div>
                                                <div class="me">試問這行文字是什麼顏色的</div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

答案 藍色。

4、第四題

<!DOCTYPE>
<html>
<head>
    <title>第四題</title>
    <style type="text/css">
        .c1 .c2 div{       /* 權重 0,0,2,1 */
            color: blue;
        }
        div #box3{         /* 權重 0,1,0,1 */
            color:green;
        }
        #box1 div{         /* 權重 0,1,0,1 */
            color:yellow;
        }
    </style>
</head>
<body>
    <div id="box1" class="c1">
        <div id="box2" class="c2">
            <div id="box3" class="c3">
                文字显示什麼顏色
            </div>
        </div>
    </div>
</body>
</html>

答案 黃色 (如果權重一樣,看層疊性)

你如果願意有所作為,就必須有始有終。(6)

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※想知道網站建置網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計後台網頁設計

※不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※帶您來看台北網站建置台北網頁設計,各種案例分享

※別再煩惱如何寫文案,掌握八大原則!

卡車界的 Tesla!油電混合車款可連續行駛 1,200 英里

電動車製造商 Tesla 的名字來自物理學家 Nikola Tesla,現在一家名叫 Nikola 的廠商則把目標放在電動卡車上,該公司推出了兩款電動卡車新品,其中純電動款單次充電可行駛 125 英里,油電混合的卡車則可以連續行駛 800 至 1,200 英里,無法充電或者加油。   Tesla 的目標市場取代人們日常出行乘坐的汽車,Nikola 同樣是製造電動車,但卻把目光放在了主要用於運輸的卡車上,致力於用電動車技術來升級傳統卡車。

該公司發表了兩款產品,Nikola One 是一款油電混合卡車,雖然目前還是一款概念車,但廣闊的商業前景已經吸引了巨大的關注,如果 Nikola 公司能夠最終把電動卡車推向市場,這將對卡車產業帶來巨大的影響。Nikola One 單次充電和加油,可連續行駛 800 至 1,200 英里 ,配置了 320kWh 電池,採用電池功能的每英里行駛成本僅是柴油發動機驅動行駛成本的五成。

Nikola One 能夠達到如此驚人的里程,主要是由於渦輪機和再生制動技術,在卡車行駛的同時能夠在內部給電池二次充電。   據 Nikola 公司透露,渦輪輸出了 400 kW 清潔能源為電池充電,這和其他廠商的油電混合車所採用的技術完全不同,多項技術都是第一次應用在卡車上。在滿載的狀況下,卡車從 0 到 65 英里的啟動時間不到 30 秒,上坡行駛也能夠達到了每小時 65 英里的速度,性能出眾。Nikola 公司的創始人、CEO Trevor Milton 表示,這款油電混合卡車聽起來可能像小說裡寫的,但團隊正在和一些美國最聰明的人合作,把這款卡車從實驗室帶向市場。Nikola One 電動卡車將改變交通運輸業的未來,消費者還需要等待一段時間。將在 2016 年年底展示原型車,定價至少高於 35 萬美元。

(本文授權轉載自《》─〈〉)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!

和諧富騰挖角Volvo高階主管,2017衝首款平民電動車

由鴻海、騰訊集團與和諧汽車聯手打造的中國電動車公司和諧富騰,致力於推動「互聯網+智慧電動車」。市場上傳出和諧富騰將延攬富豪汽車(Volvo)主管,目標在2017年推出首款平名電動車。

和諧富騰分別由和諧汽車持股接近四成、騰訊與鴻海各持股29.4%,為2015年於中國鄭州成立的合資公司,初期資本額為人民幣10億元,主要業務為電動車的生產、製造;研發與製造工作主要由鴻海負責。

目前,和諧富騰旗下有兩大子品牌:愛車、愛迪生,為雙品牌經營。其中,愛車將以推動平民款電動車iCar為主要任務。愛車有55%由和諧富騰出資,28%由和諧汽車出資,17%則為戰略合作夥伴出資。

自成立以來,和諧富騰就積極於打造自己的高階團隊,從BMW、Google自動駕駛團隊等挖角人手。目前,和諧富騰執行長由有「BMW i8電動跑車之父」的Carsten Breitfeld擔任,營運長則由有「中國豪車通」美名的Daniel Kirchert擔任。外媒近日報導,和諧富騰將延攬Volvo前中國總裁兼執行長付強加入,擔任愛車公司的執行長。

和諧富騰希望付強加入愛車公司後,能加速推動iCar的製造與行銷腳步,目標在2017年推出首輛iCar產品。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※想知道網站建置網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計後台網頁設計

※不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※帶您來看台北網站建置台北網頁設計,各種案例分享

阿里巴巴的雲原生應用開源探索與實踐

作者 | 司徒放(姬風) 阿里巴巴技術專家

本文整理自司徒放(姬風)題目為《開源的黃金時代,阿里巴巴雲原生開源的探索與實踐》的演講。
關注“阿里巴巴雲原生”公眾號,回復關鍵詞“開源”即可下載本文 PPT。

導讀:從擁抱開源、貢獻開源、自主開源,到賦能開源,開源已升級為阿里技術戰略之一,且正為開發者源源不斷地輸送切實可見的價值。雲原生是阿里開源的重要領域,短短几年,以 K8s 為核心的雲原生開源生態迅猛發展,這是全世界開發者合作傑出成果,也是開源力量的結晶。

阿里巴巴的應用架構演進

大家好,我是司徒放,目前在阿里巴巴負責阿里雲的應用平台和微服務產品線。在和大家分享我們在雲原生應用方面的探索之前,先和大家介紹一下阿里巴巴在整個應用架構方面的演進歷程。

今年是阿里巴巴成立的二十周年,二十年前,阿里巴巴使用的這個應用的架構,還是單體應用模式,它有很多的業務模塊都在一個應用裏面,各個業務都在一個應用裏面開發,這個架構的一個好處是簡單,也非常容易部署,對小的創業公司來說是很方便的。它的缺點在於團隊變大變多之後,不能滿足快速迭代要求,因為每一個業務它需要去發布的時候,都需要在同一個應用上做修改、發布,當這個業務迭代非常快的時候,它同時的一個併發修改就非常多。

所以在 2008 年的時候,阿里巴巴就引進到了微服務架構,只是當時並不叫微服務,而是叫服務化架構。各個業務模式就按照服務的邊界來拆分,這是比較松耦合的一種方式,一個微服務應用是無狀態的,可以快速擴展實例。而且某個實例有異常比如宕機時會可以自動下線,不會影響整個服務架構的穩定性。微服務架構也比較容易推動整個互聯網公司的快速迭代需求。

大概三年前,阿里巴巴就走向了雲原生的架構。這是一個天然適合雲的、能夠充分利用雲的彈性能力和標準雲服務,給整個阿里巴巴的電商降低機器的準備成本,特別是類似於在大促雙十一需要很多機器去支撐,但是大促結束之後,這些機器有一半以上就可以歸還到雲上。

這個時候,阿里巴巴就在往雲原生的方向去邁進,而且通過整個雲服務能夠更快地加快整個阿里巴巴的技術構建。而且雲原生架構,是一個比較開放、標準、沒有侵入性的技術架構。

阿里巴巴在雲原生的開源進程

在阿里巴巴進入到了雲原生之後,我們看一下阿里巴巴在開源方面做了一些什麼樣的事情呢?

運維領域

首先,整個雲原生架構裏面最重要、最關鍵的一個基石就是 Kubernetes。
阿里巴巴在兩年前,就在大規模的落地 Kubernetes 的整套技術用來做我們機器資源的調度和管理。在內部有數十萬台級別的機器以及上百萬級別的容器規模,直接拿開源的 Kubernetes 到這種生產規模下是用不起來的,所以我們在上面做了很多性能優化,包括針對規模上的改造,使得整個 Kubernetes 在阿里巴巴內部能夠很順暢地 run 起來,阿里巴巴也在不斷地向上游去貢獻我們內部實踐和優化的代碼。
除了 Kubernetes 之外,在整個雲原生生態里還有像容器、etcd,我們也在不停地優化它的規模能力以及安全隔離方面的一些能力。同時,也開源了內部使用的蜻蜓(Dragonfly)用來做大規模的鏡像快速分發。

開發領域

在開發領域,阿里巴巴很早就已經使用了微服務架構,也對外進行了開源,比如說 Apache Dubbo,這個是比較知名的 RPC 框架;還有去年開源的 Nacos ,作為阿里巴巴集團支撐大規模的服務註冊發現、配置推送一個組件;另外,還有 Spring Cloud Alibaba,基於阿里開源的組件提供了一整套 Spring Cloud 最佳實現;還有像支撐整個阿里巴巴高可用的 Sentinel、以及 Apache RocketMQ 消息隊列,都是我們在開發領域做的開源。

這些組件其實隨着阿里巴巴進入雲原生時代之後,也在逐步結合雲原生做一些改進,比如說 Apache Dubbo,會更好地去適配我們未來的微服務 Service Mesh 架構,它會理解 Istio 的 xDS 協議,成為一種數據面;比如 Nacos,它為 Service Mesh 的 Istio 提供 MCP 協議的對接,成為雲原生微服務和傳統微服務互通的橋樑。

應用

在開發領域和運維領域之間,其實我認為還有一個很大的空缺,就是專門用來連接整個開發和運維的應用這一塊。

對於開發階段,寫完代碼之後交付的是一個應用包,而這個應用包也是整個運維繫統上運行的一個基礎顆粒。我們認為現在在雲原生階段,缺少了一個很好的應用交付和運維標準,大家在不同的公司會看到每個公司都有不一樣的運維平台,應用的部署和交付都沒有辦法被標準化。我們現在進入雲原生時代,推崇的是標準、開放,所以我們認為在這一塊上面還有很大的機會去做進一步的應用標準建設,這是我接下來想要和大家重點分享的一個話題。

雲上應用交付和運維的痛點

先看一下雲原生在交付和運維方面有哪些痛點呢?

剛剛也講到了,在進入到了微服務之後,我們面臨的一個問題就是應用的實例數會越來越多,會到成百上千的規模不斷往上增長;另外還有我們部署的環境也變得越來越多,比如說現在有不同的雲廠商,以及我們有很多專有雲的自建機房的輸出;另外還有很多自建的環境,這些環境多樣化以及我們應用在運行時它會以容器的方式去運行,可能還是以傳統的虛擬機的方式去運行,或者它會以函數的方式去運行,但是運行時也會有很多不一致,比如不同的環境、或運行時的不一致,會導致整個分佈式運維體系變得越來越複雜,它的監控、日誌採集也是一個很大的挑戰。

當這些應用已經放到雲上去運行的時候,由於很多的雲服務並沒有被標準化,很多這種雲的能力需要集成到應用上的時候,也會有很大集成的困難。而這些雲上應用運維的痛點以前也有類似的,我們可以跟過往的解決方案做一個對比。

過往解決方案

首先,是類似 Ansible、Puppet 這些基礎設施運維自動化的工具。這些工具對整個運維效率起到了很大的提升作用,減輕了運維同學的工作量,但是它使用的是一些自應用的模塊,而且它的概念是偏向於腳本運維的方式,非常的底層。

隨後出現了類似 Cloud Foundry 、Heroku 這種比較經典的應用平台,這些應用平台是以應用為中心去做運維和交付,往上把運維的工作進行了一個抽象,按照 buildpack 的方式去做運維和交付,通過 buildpack 的方式,可以簡化整個應用運維的工作,但是 buildpack 本身覆蓋的範圍比較窄,在運維和交付方面,缺乏一些運維交付的標準,所以它的可擴展性是比較差的。

隨着 Docker 容器的橫空出世,打破了傳統基於 buildpack 的應用交付模式,所以就出現了新一代的容器管理平台,而 Kubernetes 成為了雲原生時代一個新的容器平台事實標準。Kubernetes 本身提供了很多基礎服務抽象,比如說 Deployment、Service。在社區裏面它有一句很著名的定位:“Kubernetes is the platform for platforms.”也就是說,Kubernetes 定位是構建平台的平台,能夠簡化構建應用平台的複雜度,它不會再去做上層基於應用的抽象。大家可以發現歷史總是那麼相似,從過去的運維工具到後來基於應用的抽象,到現在容器出現打破運維格局,重新對這個領域進行洗牌,自然,在雲原生時代需要一個對應交付和運維應用的平台。

從過往解決方案引發的思考

關於雲原生時代的應用抽象,我們要做一個思考:我們需要什麼樣的應用抽象呢?

首先,它需要解決我們運維交付的一個複雜度,以及屏蔽底層細節差異。無論什麼時候,都是應用平台需要解決的問題。另外,參考我們過去比較傳統的應用平台的問題,比如說 buildpack 這種方式,它存在不通用/不易於擴展的問題,我們認為接下來的應用抽象,它應該要具備在應用運維方面更加通用、可擴展的描述能力。

除此之外,我們在推廣應用抽象的時候,還是要採用開源和社區的方式去推進,因為未來一定是更加標準和開放的,我們推廣這個應用抽象,就是希望有更多開發和運維工作者,能夠給這個標準提供更多的建議,能夠通過整個社區進一步推動整個應用交付和運維標準的發展。

Open Application Model – 開放應用模型

在上個月中旬,阿里雲和微軟聯合發布了“Open Application Model(開放應用模型)”這一個開源項目。我們希望通過這個開放應用模型,解決“在雲原生時代缺乏一種應用交付標準”的問題。(“Open Application Model -開放應用模型”後面簡稱為“OAM”)

OAM 的三種角色

OAM 裏面有三種不同的角色。

  • 首先是應用開發。很明顯,應用開發是負責編寫業務邏輯的。比如說它會寫 Spark、Wordpress、Spring Cloud 等微服務的程序,它寫完這個微服務的程序之後呢,會按照 OAM 標準編寫一段應用定義;

  • 第二個是應用運維的角色,就是負責應用的交付與運維;

  • 第三個角色是基礎設施平台。基礎設施平台在 OAM 里的一個重要定位,在於它要將自己的基礎服務能力抽象成可被複用、被重用的模塊,並提供給開發和運維人員去使用。

OAM 核心概念解讀

下面為大家解讀以上的三個角色對應的三個核心概念。

  • 首先是 Component。它是被開發人員定義的一個可被重用的應用組件,這個應用組件描述的就是這個應用它運行的方式;

  • 第二個重要概念是 Trait。它是一種應用的運維特徵,是由基礎設施平台這個角色定義的,而這個定義它包含了可組合的應用運維特徵,這個特徵是其實是這個平台可以提供出來的某種運維能力抽象;

  • 最後一個是 ApplicationConfiguration。運維人員負責把 Component 和 Trait 兩個綁定在一起,並且作為一個具體的實例化,生成了這個應用配置(ApplicationConfiguration)之後,就可以把應用部署起來。

用 OAM 描述的應用配置示意

接下來是一個具體的用 OAM 描述的應用配置文件(上圖文件做了一定內容簡化,具體以下面的 yaml 文本為準)。

apiVersion: core.oam.dev/v1alpha1
kind: ComponentSchematic
metadata:
  name: wordpress
spec:
  workloadType: core.oam.dev/v1alpha1.Server
  containers:
    - name: test
      image: docker/wordpress:latest
      env:
        - name: key1
          fromParam: test-key
      ports:
        - type: tcp
          containerPort: 9999
          name: http
    parameters:
    - name: test-key
      type: string
---
apiVersion: core.oam.dev/v1alpha1
kind: ApplicationConfiguration
metadata:
  name: wordpress-app
spec:
  components:
    - name: wordpress
      instanceName: wordpress-instance
      parameterValues:
        - name: replicas
          value: 3
        - name: test-key
          value: value-from-ops
      traits:
        - name: service
          parameterValues:
            - name: portMapping
              value: 
                - protocol: "TCP"
                  port: 52014
                  targetPort: 9999
        - name: rollout
          parameterValues:
            - name: canaryReplicas
              value: 1

由運維人員編寫的 ApplicationConfiquration 文件,它將 Component 和 Trait 兩個概念綁定在一起。首先裏面描述運維要部署一個叫 wordpress-app的應用,它引用了一個叫 wordpress 的 Component。這是開發人員在另一個配置文件 Component 定義的,他除了定義 wordpress 應如何運行(比如配置鏡像位置)以外,還允許運維配置運行實例的副本數以及運行時環境變量 test-key 的值。在 ApplicationConfiquration 里同時引用了兩個運維特徵,運維人員會填寫這個應用需要一個負載均衡,要做外網的端口映射,部署時需要採用金絲雀發布策略。這個文件對應到實際上的部署階段會變成如上圖右側所示,上面會有一個負載均衡,比如在雲上運行時,就會使用 SLB 去做負載均衡的自動分發,會給它配置外網 IP 和內外端口映射。

通過這個簡單的 yaml 文件,大家就可以了解到這個應用怎麼做快速部署,並且描述運維要具備什麼能力。

OAM 的設計理念

給大家總結一下,我所認為的 OAM 的重要的設計理念。

  • 首先第一個是配置即代碼。所有的 OAM 上面的運維和交付的操作都會使用配置的方式,完全通過 yaml 文件去完成所有的交付運維配置;

  • 第二個是依賴倒置。這個依賴倒置有點像 JAVA Spring 開發者使用 IoC 或者 DI 的這種模式,在寫這個應用配置的時候,只是依賴應用標準抽象,而這個標準抽象背後的實現實際上是由 OAM 的運行時去做“注入”,通過這個方式就使得我們的應用運維不依賴於我們具體的運行環境;

  • 第三個是重要的設計理念就是角色關注點分離。剛剛上面講過 OAM 里的三種不同的重要角色:開發、運維以及基礎設置平台。這三種角色只需要編寫對應不同的配置文件,互相解耦。這樣開發不需要關心應用是怎麼運維的,只需要把運行時需要的配置暴露並描述出來;基礎平台只需要把平台能力提煉成 Trait;最終由運維人員把開發需要的參數和運維需要的能力進行結合。

  • 第四個就是整個 OAM 的設計是一個可組合可擴展的方式。它會通過讓我們剛剛說到的 Traits 能夠按需組合、重用、移植和擴展。

EDAS & OAM

上面我們說了這麼多其實都是比較一些概念性的東西,接下來我們看一下,在阿里巴巴的雲產品 EDAS 對 OAM 所做一些落地方面的嘗試,這也是第一個在實際生產上面基於 OAM 對外可開放使用的雲產品。

下面會用 EDAS 為例,給大家做一個介紹,講解一下 OAM 具體怎麼運作。

EDAS 是什麼?

首先介紹一下 EDAS 是阿里雲上面的一個雲產品,它扮演着我剛才講到的類似於一個應用平台的一個角色:

  • EDAS 從開發方面就提供了開發框架給我們雲上的開發者去使用;
  • 開發者開發完程序之後,會把應用交付到 EDAS 上面去進行部署;
  • 與此同時 EDAS 會對這個應用進行監控診斷,根據容量情況進行實例彈性伸縮;
  • EDAS 會對上面的微服務進行註冊發現、服務治理;
  • 提供應用的高可用保護,比如限流降級、熔斷等。

這些是 EDAS 作為應用平台在阿里雲上的產品定位。

EDAS 支持 OAM 的運行示意圖

那麼它在支持 OAM 在運行的時候又是什麼樣的呢?

如圖所示,一個開發人員,他首先需要去編寫一個按照 OAM 標準為參考去定義一個 Component。這個 Component 裏面會定義如開發應用類型是什麼樣子,比如它的鏡像路徑、它需要多大的存儲空間,以及它的環境變量是什麼樣子,這些都是開發人員在開發的時候需要去描述的內容。

對於阿里雲來說,它是一個基礎設施平台的身份。它在上面其實有很多運維的能力,比如說像監控報警、塊存儲、需要發布策略和彈性伸縮的策略。EDAS 會把這些平台能力抽象成一個一個獨立的 Trait,開放給運維人員使用。

在需要部署應用的時候,運維人員會選擇 EDAS 上提供的 Trait 並填寫相關參數,同時也設置好開發人員的 Component 的參數,這作為一次應用部署,生成了 ApplicationConfiguration 提交給 EDAS。

EDAS 作為 OAM 的運行時,在讀取到這份部署配置后,它會去實現 Trait 提供相應的運維特徵動作,比如說運維描述需要一個塊存儲,那麼 EDAS 會在阿里雲上面去申請一個具體的塊存儲對象,並綁定到這個應用上面。同時 EDAS 會提供一個容器環境(如 Kubernetes)去運行開發者定義的 Component 的工作負載,比如購買 ECS,配置好容器環境,把環境變量傳給容器,使 Component 能夠正常運行。

以上就是整個 EDAS 支持 OAM 的一個運行示意圖。

EDAS 支持 OAM 的對比

那麼 EDAS 在支持 OAM 之後,它的使用情況又會發生怎樣的變化呢?

在沒有使用 OAM 的時候,客戶需要和系統解釋我要做些什麼事情、我要怎麼做這個事情。比如說,他需要申請 5G NAS 存儲,並且要把它掛載到某個機器的某個目錄上面;或者他還有一個監控的需求,他需要告訴系統現在有一個業務指標文件,需要被監控採集,他要去設置這個文件的指標處理規則,最後把這個指標存儲成時間序列數據,並且設置報警閾值。在使用 OAM 之後,它就變成了描述式,他只要描述我需要什麼東西就夠了。比如開發者可以說這個目錄上面需要有 5G 的外置可讀寫存儲就夠了,具體這 5G 存儲怎麼申請是由 OAM 運行時去幫助解決的。另外,在監控的時候,他只需要描述自己的這個應用需要被監控、哪個指標需要被監控並報警就夠了,他不需要了解對接到具體是哪一個監控系統,他不需要去關心這些事情。

原來很多雲產品或者原來很多自定義運維平台都是需要依賴特定的 API 或者 CLI 這種模式去做運維的,這個時候應用要遷移到另外一個運維平台,它的代碼、鏡像、二進制包可以帶走,但是它的很多運維的設施、運維的配置包括監控的配置,這些東西都是只能留在這個平台上的,沒有辦法很容易地遷移到另外一個平台上面。而通過 OAM,可以將平台所有的運維配置以 yaml 導出,並且能夠很快地導入到另外一個環境、甚至是另一個應用平台上,整個系統會變得更加標準。

在使用 OAM 以前,運維人員需要去學習很多知識,比如使用的是 Kubernetes,他需要去了解整個容器和 Kubernetes 的使用方式,他要做定製和拓展就需要去學習 Kubernetes。如果他是從虛擬機的模式切換到容器的運維模式,這個時候他就需要很多時間去理解容器和虛擬機運維之間的差異。遷移到 OAM 之後,相當於 OAM 屏蔽了整個平台底層的細節,所以使得整個運維平台的 OAM 配置沒有多大差別。

最後一點就是定製的難度上面。剛剛也講到過,這個是 OAM 的一個重要的目標,讓整個運維的擴展能夠更容易的被發現、被組合、被替換。在使用 OAM 之前,運維的邏輯都散落在腳本裏面,或者說都在運維平台內部,這個時候很難去統一管理。而一套 OAM 的運行環境是可以自描述的,可以非常容易把平台提供的 Trait、Component 工作負載羅列出來,使用者可以替換或增加新的 Traits,在運行應用時可以自由選擇和組合這些 Traits。

OAM 後續規劃,歡迎社區貢獻

以上講了 OAM 相關的一些基本內容,實際上 OAM 剛剛開源還有很多需要補充和完善的地方,這裏也列出了 OAM 上最近這半年的計劃,希望大家能夠參与社區,在上面貢獻更多的想法。

主要有幾個規劃:

  • 易用性方面
    • 提供 Kubernetes 一鍵導入工具;
    • 增加應用之間的依賴描述;
    • 不斷完善 OAM 的標準定義(Spec);
    • 社區提供更多的 OAM 上的實踐案例;
  • OAM 開發方面
    • 盡量進一步去做開發的簡化,包括一些字段的校驗工具、編寫 Controller 框架,方便更高效的開發 Trait 等實現;
    • 另外,OAM 它本身不僅僅是一個標準,它還提供了一個名為 Rudr 的參考開源實現;
  • 功能方面
    • 提供新的基礎 Traits 去簡化應用運維管理,比如常見的流量管理、藍綠髮布;
    • 能對接更多的應用平台,比如說像 Windows、IoT 這樣的平台。

最後,我的演講就到這裏,謝謝大家!喜歡 OAM 的朋友可以掃描下方二維碼,謝謝!

更多詳細信息請關注“”。

“ 阿里巴巴雲原生微信公眾號(ID:Alicloudnative)關注微服務、Serverless、容器、Service Mesh等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的技術公眾號。”

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!

LNMP+Redis架構部署

工作機制

  • L(Linux)N(Nginx)M(Mysql)P(PHP)架構想必大家都知道,LNMP架構主要作用是讓前端服務與後端存儲以及後端的一下服務進行連接起來,來實現php程序的動態請求。

   而今天我們又在LNMP架構上面加一個Redis程序,而Redis在整個架構中起到了一個數據緩存的作用。

  • LNMP+Redis工作機制:當用戶通過瀏覽器訪問網站時,並使用賬號密碼進行登陸時,此時會向Redis發出查詢請求,若Redis緩存中沒有相關信息,則php會查詢mysql數據庫中的相關信息,然後將相關信息緩存在redis中;在下次此用戶訪問時,php無需再從mysql數據庫中讀取數據,直接從redis中讀取緩存並將數據返回,這樣就可以減少數據庫的讀取壓力。
  • 下面是簡單的工作機制示意圖

 

系統環境描述

  • Linux系統版本:我這裏使用的是Ubuntu系統,大家可以選用不同的Linux版本
   jia@uduntu:~$ lsb_release -a

    No LSB modules are available.
    Distributor ID: Ubuntu
    Description: Ubuntu 19.10
    Release: 19.10
    Codename: eoan

  • Nginx軟件版本
  nginx/1.16.1 (Ubuntu)
  •  PHP軟件版本
   7.3.11-0ubuntu0.19.10.1 amd64
  • MariaDB軟件版本
   1:10.3.17-1 all

 

  • Redis軟件版本
   5:5.0.5-2build1 all

 

部署Nginx

Nginx描述:Nginx (engine x) 是一個高性能的HTTP和反向代理web服務器,同時也提供了MAP/POP3/SMTP服務。Nginx是一款輕量級的Web 服務器/反向代理服務器及电子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行。其特點是佔有內存少,併發能力強,事實上nginx的併發能力在同類型的網頁服務器中表現較好。

安裝

安裝Nginx軟件包有很多種方法比如:RPM包安裝、編譯安裝等,我在這裏軟件就全部使用RPM進行安裝了

jia@uduntu:~$ sudo apt -y install nginx

    Setting up fonts-dejavu-core (2.37-1) ...
    Setting up libjpeg-turbo8:amd64 (2.0.3-0ubuntu1) ...
    Setting up libjpeg8:amd64 (8c-2ubuntu8) ...    
    Setting up libnginx-mod-mail (1.16.1-0ubuntu2) ...
    Setting up fontconfig-config (2.13.1-2ubuntu2) ...
    Setting up libnginx-mod-stream (1.16.1-0ubuntu2) ...
    Setting up libtiff5:amd64 (4.0.10+git191003-1) ...
    Setting up libfontconfig1:amd64 (2.13.1-2ubuntu2) ...
    Setting up libgd3:amd64 (2.2.5-5.2) ...
    Setting up libnginx-mod-http-image-filter (1.16.1-0ubuntu2) ...
    Setting up nginx-core (1.16.1-0ubuntu2) ...
    Setting up nginx (1.16.1-0ubuntu2) ...
    Processing triggers for ufw (0.36-1ubuntu3) ...
    Processing triggers for systemd (242-7ubuntu3) ...
    Processing triggers for man-db (2.8.7-3) ...
    Processing triggers for libc-bin (2.30-0ubuntu2) ...
jia@uduntu:
~$

 

出現上面字符即為安裝成功

啟動

程序啟動有兩種方法

  1. 作為系統服務進行啟動,啟動方法:

Ubuntu以及rhel7以上版本使用下面方式:

    systemctl  start nginx        \\啟動Nginx
    systemctl  stop  nginx        \\停止Nginx
    systemctl  restart  nginx        \\重新啟動Nginx

 

rhel7一下版本使用下面方式:

    server  nginx  start        \\啟動Nginx
    server  nginx  stop            \\停止Nginx
    server  nginx  restart        \\重新啟動Nginx

 

  1. 使用Nginx啟動腳本進行控制Nginx啟停:
    sh nginx        \\啟動Nginx
    停止nginx可以使用結束進程的方式進行停止

 

測試並訪問

接下來讓我們啟動nginx並進行訪問:

jia@uduntu:~$ systemctl start nginx        \\我這裏使用的非root用戶所以要求輸入密碼
    ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
    Authentication is required to start 'nginx.service'.
    Authenticating as: jia
    Password: 
    ==== AUTHENTICATION COMPLET
jia@uduntu:~$

 

啟動成功后訪問:
訪問地址:

    http://Server IP Address

 

看到下面內容證明安裝並啟動成功:

部署PHP

PHP描述:PHP即“超文本預處理器”,是一種通用開源腳本語言。PHP是在服務器端執行的腳本語言,與C語言類似,是常用的網站編程語言。PHP獨特的語法混合了C、Java、Perl以及 PHP 自創的語法。利於學習,使用廣泛,主要適用於Web開發領域。

安裝

    jia@uduntu:~$ sudo apt -y install php php7.3-fpm
    [sudo] password for jia:             //這裏正常輸入密碼
        \\安裝最後出現下面顯示錶示安裝成功
    Creating config file /etc/php/7.3/mods-available/json.ini with new version
    Setting up php7.3-readline (7.3.11-0ubuntu0.19.10.1) ...

    Creating config file /etc/php/7.3/mods-available/readline.ini with new version
    Setting up php7.3-cli (7.3.11-0ubuntu0.19.10.1) ...
    update-alternatives: using /usr/bin/php7.3 to provide /usr/bin/php (php) in auto mode
    update-alternatives: using /usr/bin/phar7.3 to provide /usr/bin/phar (phar) in auto mode
    update-alternatives: using /usr/bin/phar.phar7.3 to provide /usr/bin/phar.phar     (phar.phar) in auto mode

    Creating config file /etc/php/7.3/cli/php.ini with new version
    Setting up php7.3-fpm (7.3.11-0ubuntu0.19.10.1) ...

    Creating config file /etc/php/7.3/fpm/php.ini with new version
    Created symlink /etc/systemd/system/multi-user.target.wants/php7.3-fpm.service →     /lib/systemd/system/php7.3-fpm.service.
    Setting up php7.3 (7.3.11-0ubuntu0.19.10.1) ...
    Setting up php (2:7.3+69ubuntu2) ...
    Processing triggers for man-db (2.8.7-3) ...
    Processing triggers for systemd (242-7ubuntu3) ...

 

啟動

上面已經給大家說過Nginx的啟動方法了,php啟動方法與Nginx基本一樣

jia@uduntu:~$ systemctl start  php7.3-fpm
    ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
    Authentication is required to start 'php7.3-fpm.service'.
    Authenticating as: jia
    Password:             \\輸入密碼
    ==== AUTHENTICATION COMPLETE ===
jia@uduntu:~$ 

 

啟動成功,可以使用查看進程的方式進行查看

jia@uduntu:~$ ps uax | grep php            \\下面進程表示php運行進程
    root      10346  0.0  2.5 193732 17384 ?        Ss   08:29   0:00 php-fpm: master process     (/etc/php/7.3/fpm/php-fpm.conf)
    www-data  10357  0.0  0.9 194044  6348 ?        S    08:29   0:00 php-fpm: pool www
    www-data  10358  0.0  0.9 194044  6348 ?        S    08:29   0:00 php-fpm: pool www
    jia       10572  0.0  0.1   6296   920 pts/0    S+   08:33   0:00 grep --color=auto php
jia@uduntu:~$

 

配置Nginx

php啟動成功後下面配置Nginx,讓Nginx接收到的php請求轉交給php服務器進行解析
nginx配置文件:

    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html index.php ;        \\此處需要在後面添加index.php
        server_name _;
        location / {
        try_files $uri $uri/ =404;
        }
        location ~ \.php$ {            \\取消註釋
               include snippets/fastcgi-php.conf;        \\取消註釋
               fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;        \\這一行和下面一行指的是php偵聽方式,查看php是偵聽那種方式然後取消註釋哪一行
               fastcgi_pass 127.0.0.1:9000;            \\
        }

在php-fpm配置文件種查看php的偵聽方式:

    listen = /run/php/php7.3-fpm.sock        \\這種偵聽方式適用於本地php
    listen = 127.0.0.19000        \\這種偵聽方式適用於遠程PHP

 

看你的那個php是那種方式偵聽的,然後將nginx配置文件中的一行取消註釋,然後再重新啟動nginx使改動生效

測試

默認網頁代碼的存放位置:

    /var/www/html

 測試只需要將index,html該名為index.php,內容更改為你的php代碼
我的php代碼內容為:

    <?php
        phpifo();
    ?>

 

下面來訪問一下,訪問地址不變

只要可以解析PHP代碼了就表示配置安裝成功

部署MariaDB

部署MariaDBMariaDB描述:MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,採用GPL授權許可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕鬆成為MySQL的代替品。MariaDB基於事務的Maria存儲引擎,替換了MySQL的MyISAM存儲引擎,它使用了Percona的 XtraDB,InnoDB的變體,分支的開發者希望提供訪問即將到來的MySQL 5.4 InnoDB性能。這個版本還包括了 PrimeBase XT (PBXT) 和 FederatedX存儲引擎。

安裝

 jia@uduntu:~$ sudo apt -y install mariadb-server
    Setting up mariadb-client-10.3 (1:10.3.17-1) ...
    Setting up libdbd-mysql-perl:amd64 (4.050-2build1) ...
    Setting up libhtml-parser-perl (3.72-3build2) ...
    Setting up mariadb-server-10.3 (1:10.3.17-1) ...
    Created symlink /etc/systemd/system/mysql.service → /lib/systemd/system/mariadb.service.
    Created symlink /etc/systemd/system/mysqld.service → /lib/systemd/system/mariadb.service.
    Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /lib/systemd/system/mariadb.service.
    Setting up libhttp-message-perl (6.18-1) ...
    Setting up libcgi-pm-perl (4.44-1) ...
    Setting up libhtml-template-perl (2.97-1) ...
    Setting up mariadb-server (1:10.3.17-1) ...
    Setting up libcgi-fast-perl (1:2.15-1) ...
    Processing triggers for systemd (242-7ubuntu3) ...
    Processing triggers for man-db (2.8.7-3) ...
    Processing triggers for libc-bin (2.30-0ubuntu2) ...
jia@uduntu:~$            \\出現上面代碼錶示安裝成功

 

啟動

同Nginx:

 jia@uduntu:~$ systemctl start mariadb
    ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
    Authentication is required to start 'mariadb.service'.
    Authenticating as: jia
    Password:         \\此處輸入密碼
    ==== AUTHENTICATION COMPLETE ===
 jia@uduntu:~$ 

 

查看是否啟動成功:

 jia@uduntu:~$ ps uax | grep mysqld
    mysql     11669  0.2 11.5 1713056 78488 ?       Ssl  09:17   0:00 /usr/sbin/mysqld
    jia       12614  0.0  0.1   6296   924 pts/0    S+   09:23   0:00 grep --color=auto mysqld
 jia@uduntu:~$ 

 

初始化數據庫:

 jia@uduntu:~$ sudo mysql_secure_installation 
     \\下面是初始化過程
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
jia@uduntu:~$ 

 

初始化完成后,可直接使用自帶的mysql客戶端進行連接

 jia@uduntu:~$ sudo mysql -u root -p
    Enter password: 
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 56
    Server version: 10.3.17-MariaDB-1 Ubuntu 19.10

    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    MariaDB [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | ifnormation_schema |
    | mysql              |
    | performance_schema |
    +--------------------+
    3 rows in set (0.000 sec)

     MariaDB [(none)]> 

配置php支持

安裝php連接數據庫的中間件:php-mysql

 jia@uduntu:~$ sudo apt -y install php-mysql
    Preparing to unpack .../php-mysql_2%3a7.3+69ubuntu2_all.deb ...
    Unpacking php-mysql (2:7.3+69ubuntu2) ...
    Setting up php7.3-mysql (7.3.11-0ubuntu0.19.10.1) ...

    Creating config file /etc/php/7.3/mods-available/mysqlnd.ini with new version

    Creating config file /etc/php/7.3/mods-available/mysqli.ini with new version

    Creating config file /etc/php/7.3/mods-available/pdo_mysql.ini with new version
    Setting up php-mysql (2:7.3+69ubuntu2) ...
    Processing triggers for php7.3-fpm (7.3.11-0ubuntu0.19.10.1) ...
jia@uduntu:~$             //安裝成功

 

配置php.ini文件,將配置文件中extension=mysqli這一行取消註釋就可以了,然後重新啟動php-fpm

 jia@uduntu:/etc/php/7.3/fpm$ systemctl restart php7.3-fpm
    ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
    Authentication is required to restart 'php7.3-fpm.service'.
    Authenticating as: jia
    Password:             \\輸入密碼
    ==== AUTHENTICATION COMPLETE ===
 jia@uduntu:/etc/php/7.3/fpm$ 

測試

測試php是否可使用數據庫,最好的方法就是使用php代碼寫一個連接數據庫就可以了
代碼如下:

    <?php
        $host = "localhost";    //mysql主機
        $user = "root";            //mysql用戶
        $passwd = "redhat";        //mysql密碼
        $conn = new mysqli($host,$user,$passwd);
        if (!$conn){
            die("連接數據庫失敗");
        }
        echo "連接數據庫成功";        
    ?>

 

显示數據庫連接成功示安裝成功

部署Redis

Redis描述:Redis(全稱:Remote Dictionary Server 遠程字典服務)是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。

安裝

jia@uduntu:~$ sudo apt -y install redis                \\出現下面提示表示安裝成功
    Setting up lua-cjson:amd64 (2.1.0+dfsg-2.1) ...
    Setting up libatomic1:amd64 (9.2.1-9ubuntu2) ...
    Setting up lua-bitop:amd64 (1.0.2-5) ...
    Setting up liblua5.1-0:amd64 (5.1.5-8.1build3) ...
    Setting up libhiredis0.14:amd64 (0.14.0-3) ...
    Setting up redis-tools (5:5.0.5-2build1) ...
    Setting up redis-server (5:5.0.5-2build1) ...
    Created symlink /etc/systemd/system/redis.service → /lib/systemd/system/redis-                                        server.service.
    Created symlink /etc/systemd/system/multi-user.target.wants/redis-server.service →     /lib/systemd/system/redis-server.service.
    Setting up redis (5:5.0.5-2build1) ...
    Processing triggers for systemd (242-7ubuntu3) ...
    Processing triggers for man-db (2.8.7-3) ...
    Processing triggers for libc-bin (2.30-0ubuntu2) ...
jia@uduntu:~$ 

 

啟動

啟動等同於Nginx啟動

jia@uduntu:~$ sudo systemctl start redis

 

啟動成功後進行檢查

jia@uduntu:~$ sudo netstat -anpl |  grep redis
    tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN          2094/redis-server 1 
    tcp6       0      0 ::1:6379                :::*                    LISTEN          2094/redis-server 1 
jia@uduntu:~$ 

可以看到redis端口(6379)就證明啟動成功
下面讓我們使用redis客戶端測試一下:

jia@uduntu:~$ sudo redis-cli         \\啟動redis客戶端
    127.0.0.1:6379> set test "hellow word"            \\設置變量
        OK
    127.0.0.1:6379> get test        \\輸出變量
        "hellow word"
    127.0.0.1:6379> del test        \\刪除變量
        (integer) 1
    127.0.0.1:6379> get test    
        (nil)
    127.0.0.1:6379> 

 

上面測試可以看出redis安裝成功,並啟動成功

配置php支持

安裝php連接redis中間件

jia@uduntu:~$ sudo apt -y install php-redis                \\輸出以下內容表示安裝成功
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following additional packages will be installed:
      php-igbinary
    The following NEW packages will be installed:
      php-igbinary php-redis
    0 upgraded, 2 newly installed, 0 to remove and 18 not upgraded.
    Needto get 239 kB of archives.
    After this operation, 1,052 kB of additional disk space will be used.
    Get:1 http://cn.archive.ubuntu.com/ubuntu eoan/universe amd64 php-igbinary amd64 3.0.0-    1build1 [101 kB]
    Get:2 http://cn.archive.ubuntu.com/ubuntu eoan/universe amd64 php-redis amd64 5.0.2+4.3.0-2build1 [138 kB]
    Fetched 239 kB in 13s (19.0 kB/s)                                                                                  
    Selecting previously unselected package php-igbinary.
    (Reading database ... 70748 files and directories currently installed.)
    Preparing to unpack .../php-igbinary_3.0.0-1build1_amd64.deb ...
    Unpacking php-igbinary (3.0.0-1build1) ...
    Seleting previously unselected package php-redis.
    Preparing to unpack .../php-redis_5.0.2+4.3.0-2build1_amd64.deb ...
    Unpacking php-redis (5.0.2+4.3.0-2build1) ...
    Setting up php-igbinary (3.0.0-1build1) ...
    Setting up php-redis (5.0.2+4.3.0-2build1) ...
jia@uduntu:~$ 

 

安裝成功后,配置php支持redis
找到php.ini這個配置文件,添加下面配置,找到exension=mysql這一條,然後將下面代碼粘貼到下一行

    extension=redis.so

 

測試

測試php是否可以使用redis,下面頁面簡單既可以進行測試

<?php
   $redis = new Redis();        \\redis連接參數
   $redis->connect('127.0.0.1', 6379);        \\括號內第一項是指的redis server ip,第二項是 redis port
   echo "Connection to server successfully </br>";
   echo "Server is running: " . $redis->ping();
?>

 

將/var/www/html下面的index.php文件內容替換為上面內容,然後直接訪問即可
連接地址:

    http://nginx server ip

 

显示下面內容表示連接成功

Connection to server successfully
Server is running: 1

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※想知道網站建置網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計後台網頁設計

※不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※帶您來看台北網站建置台北網頁設計,各種案例分享

Google 將與FCA合作測試自動駕駛 公開私人測試跑道

Google自動駕駛汽車項目和菲亞特克萊斯勒(FCA)已經宣佈,將把Google的自動駕駛技術融入到全新的2017款克萊斯勒Pacifica混動力廂式旅行車,擴大Google現有的自動駕駛測試項目。

這是Google第一次與汽車製造商直接合作,將包括感測器和軟體在內的自動駕駛系統整合到一輛自小客車中。

克萊斯勒Pacifica混動力廂式旅行車將在今年稍後用於Google的自動駕駛測試,測試的數量是Google現有測試車輛的兩倍還多。

工程責任將根據每個公司的特長來進行共擔。FCA最初將會設計和研發大約100輛適配Google自動駕駛技術的汽車。

Google將對感測器和電腦套件進行整合,讓車輛能夠自動駕駛。

兩家公司將共同派出一部分工程師團隊前往密歇根州東南部的一個工廠,以便加快自動駕駛版本的克萊斯勒Pacifica的設計、測試和製造。Google的自動駕駛汽車目前正在美國的四個城市進行測試。

自動駕駛版本克萊斯勒Pacifica混動力廂式旅行車在上公共道路行駛之前,將由Google的自動駕駛汽車測試團隊在其加州的私人跑道上進行測試。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!