神仙也難救! Segway 7月15日停產

摘錄自2020年6月24日自由財經報導

曾經風靡一時、被視為會改變人類社會的創新科技Segway(賽格威)電動平衡車,將於今年7月15日起終止開發。

根據統計,在Segway推出近20年期間,總共只賣出14萬台,產品大多被用作安全人員的巡邏和遊客遊覽的代步工具。

因 Segway的設計獨特,使它看起來極具科技感,各國交通監理單位卻無法給予它明確定位。在美國有將近一半的地區,禁止Segway行駛於人行道上;在歐洲則被視為動力車輛,許多國家禁止它在公共道路上行駛。台灣對於 Segway則沒有分類,但基本上是不允許在道路上行駛。

生活環境
能源轉型
國際新聞
電動概念車
交通運輸

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

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

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

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

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

※網頁設計最專業,超強功能平台可客製化

※回頭車貨運收費標準

優惠末班車!回家過年的抓緊入手熱門SUV的最後機會!

6-31。90萬購置稅優惠(元):12222-13632寶馬X1定位於一款緊湊型SUV,在外觀方面,寶馬X1保留了海外車型的設計風格,但是軸距卻比海外版本加長了110mm,經典的雙腎格柵搭配天使眼造型的大燈組霸氣十足。相比與同級別的對手來說,寶馬X1擁有一個更大的車型尺寸,看起來更為大氣。

告訴你們一個喜悅但是有暗含悲傷的好消息,16年已經進入尾聲而且春節又來得特別早,不少朋友都開始計劃搶回家的車票了。除此以外,不少消費者還會選擇在春節前購買一輛心儀的座駕自駕回家!這樣還能在親戚朋友面前倍有面子!

買車是個好消息,但是為什麼要悲傷呢?原因很簡單,因為國家頒布的1.6L及以下排量購置稅優惠減半的優惠政策在31日就已經正式結束了。至於明年是否還有減半的優惠,在這兒可以明確地告訴你是“沒有的!”這個消息夠傷心了吧。

經計算

10萬的車能省4274元

20萬的車能省8547元

30萬的車能省12821元

近日國家有發布了一項購車優惠政策,雖然5折是沒希望了,但是在購置稅方面則給你打了個7.5折,雖然有打折,但是年後買車你依舊需要多付一定的費用。16年所剩的日子不多了,想要買車更便宜、想要見親戚朋友倍有面子,買一台高端大氣上檔次的SUV就是最佳選擇!

別克昂科威20T

售價:20.99-25.99萬

購置稅優惠(元):8970-11107

作為合資SUV榜單上的冠軍車型,別克昂科威是一輛為中國消費者打造的神級SUV,一副高端大氣的外觀設計是吸引消費者最重要的利器!無論是在設計上還是整車的高級感方面,昂科威這台車都做得相當好。

除了一副高能吸睛的外觀,別克昂科威的內心也是十分強大。高檔的內飾設計、極為豐富的配置水平以及寬敞的車內空間都能很好地滿足眾多消費者的購車需求,另外最值得點贊的是昂科威的隔音降噪水平和搭載Onstar 車載4G LTE,絕對是領先同級的存在。

在動力方面,1.5T+7速DCG 智能啟停雙離合變速箱這套動力總成推動這樣一台中型SUV完全夠用,而且在油耗方面也是值得點贊。雖然別克昂科威還有2.0T的車型,但是為了符合購置稅優惠減半的政策,今天推薦的主要是1.5T的車型,這也是目前走量的車型,而且目前昂科威整體的優惠幅度普遍比較大,所以入門版的車型在終端售價方面已經能下探到20萬以內,所以競爭力是相當大的。

寶馬X1 18Li

售價:28.6-31.90萬

購置稅優惠(元):12222-13632

寶馬X1定位於一款緊湊型SUV,在外觀方面,寶馬X1保留了海外車型的設計風格,但是軸距卻比海外版本加長了110mm,經典的雙腎格柵搭配天使眼造型的大燈組霸氣十足。相比與同級別的對手來說,寶馬X1擁有一個更大的車型尺寸,看起來更為大氣!

在內飾方面儘管X1在用料方面有所提升,但是整體的設計依舊是眾多消費者的槽點,而在空間方面是X1最大的亮點,堪比中型SUV的空間也是同級罕有,這也是眾多消費者選擇X1的最主要因素之一。

在動力方面,18Li實則是一台1.5T三缸渦輪增壓發動機,搭配上愛信的6AT變速箱,這套動力總成是可以滿足我們的日常駕駛所需。寶馬一直以操控見長,雖然新X1採用了前驅平台,對比上一代車型確實是有所下降,但是對於同級別的競爭對手來說,X1營造出來的運動感依舊存在。

奧迪Q3 30TFSI

售價:23.42-28.38萬

購置稅優惠(元):10008-12128

奧迪Q3屬於一台緊湊型SUV,在外觀方面依舊延續了奧迪的經典風格,在整體設計比較平庸,但是這樣的設計也能吸引到不少消費者的關注,奧迪就給到你一種高端豪華的感覺。

在內飾方面,內飾整體設計依舊平庸,中控台中央部分偏向主駕駛位一側,副駕駛座前方大面積銀色飾板等設計是Q3問世之後一直保持至今的元素之一,但整體的做工水平均屬上乘。

在動力上,EA211+6DSG整體表現中規中矩,最大馬力150匹,最大扭矩250牛米的水平對於家用車來說也算夠用。而奧迪Q3最吸引消費者的要數它的優惠幅度,豪華車卻能賣出堪比合資車型的價格,而且奧迪的車標也是眾多消費者所喜愛的。

標緻4008 350THp

售價:18.57-23.07萬

購置稅優惠(元):7936-9858

在前段時間,標緻4008終於換代了,新車的外觀設計無疑是讓人眼前一亮,時尚前衛、大膽有活力,極為個性的外觀讓它一舉成為顏值極高的個性选手,當然這樣過於“前衛”也並不是所有消費者能夠接受的。

環抱式的內飾設計,狂拽炫酷吊炸天是對它內飾的評價,科技感十足的設計逼格滿滿,這樣的設計跟其它同級別的选手壓根就不在同一個維度上,標緻就是這樣不走尋常路。

在動力方面1.6T+6AT的動力總成足夠日常使用,如果想要更爽快的動力,4008還提供1.8T的車型。4008採用的是麥弗遜式前懸架以及扭力梁式后懸架,但法系車一直以底盤調校見長,而4008也是如此,整車開起來底盤沉穩紮實。

2016已經走到了尾聲,17年就沒有減半優惠了,過了這個村就沒這個店了,在購車時又得多給錢了,抓緊最後的步伐吧。值得提醒的一點是就目前的時間來看,最好就是買現車,現在訂車的話時間相當緊促。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

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

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

※超省錢租車方案

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※回頭車貨運收費標準

誰說國產SUV都是樣子貨?這款SUV開去哪裡都不怕!

與我換手的教練兼拉力賽賽車手,僅憑着車燈照探着鋪滿冰渣的路面。儘管開得再小心、再緩慢,但無數的暗坑或是前車遺留的巨大冰碴還是讓我們難以躲避。幸好瑞虎7前麥弗遜后多連桿的懸挂結構加上偏向於運動的底盤調校風格,讓顛起的車身被迅速拉住,車身的晃動被有效地控制,這才讓我們這群處於黑暗的趕路人不顯狼狽。

我對東北的印象,最早建立於08年在央視播出的電視劇《闖關東》。在19世紀的特殊歷史條件下,劇中的主角朱家一眾從山東舉家搬遷至東北的元寶鎮。在廣袤荒涼的土地上,面對極寒、土匪、日軍侵略者等磨難,朱家不屈不撓地用雙手在這片東北土地紮下了根。而闖關東這個詞,既成為東北地區最為顯著的民俗文化,也成為對東北人拼搏精神最深刻的刻畫。

這次,隨着瑞虎7“虎眼看中國”第二站的步伐,從長春到長白山,我得以通過自駕瑞虎7的方式,更深入地遊走東北。雖然出發的意義沒有了過去歷史背景的沉甸,但對於極少在寒冬自駕東北的人以及瑞虎7這款奇瑞最新的旗艦SUV來說,這也是對闖關東的一次探究。

消失的“北國春城”

因為高達41.5%的城區綠化覆蓋,長城也被譽為“北國春城“。但在12月低至零下-16℃的背景下,北國春城的愜意怡人變得不復存在。唯一能夠讓人產生浪漫情緒的,大概也就只剩被積雪裹覆的路邊盆栽以及平房屋頂紅磚煙窗上飄着的白煙。所以冬天的長春街頭並不熱鬧,長春人更喜歡待在熱氣瀰漫的室內。反倒是長春的龍嘉機場人頭涌動,因為各地直飛長白山的機票早已售罄,這個距離長白山最近的機場成為了那些奔赴長白山的旅遊者最理想的中轉點。

內在比外在更豐富的瑞虎7

我們由長春驅車前往長白山,全程大概500餘公里。儘管去年通車的松江河高速已經使得兩地的直線距離大大縮短,但飄雪以及光滑的冰面道路仍然使這趟旅程顯得異常險峻。而奇瑞希望這一段旅程能夠給旗下的旗艦SUV—瑞虎7添加更多高性能、高品質的註腳。在此之前,瑞虎7的原型車—TX概念車已經在第83屆的日內瓦車展上榮獲年度最佳概念車獎而走紅。這款誕生自奇瑞2.0時代的產品,其實有更多內在的亮點可以說道。

在整段的松江河高速路段,始終是較為狹窄的三車道,而連日的降雪又讓原本的三車道實際只剩下兩車道。加之覆蓋在路面上的大面積冰塊,提前制動以及不斷修正跑偏的方向是冰雪駕駛時需要學會的技巧。不過全系配備ABS防抱死、ESp車身穩定控制系統、EBA剎車輔助的瑞虎7在整段的行程里都更讓人放心。我不用擔心車輛的側滑,更不用擔心車輪的抱死。除此以外,2.0L自然吸氣發動機+CVT無級變速箱的動力組合也提供了順滑、理想的動力輸出,動力的響應程度要比那些半路出家的小排量增壓發動機+雙離合讓人滿意太多了。這讓我更快、更安全地達到長白山。

盛產刨花板的“烏托邦小鎮”

從松江河高速轉下的第一個小鎮是位於撫松縣的露水河鎮,實際上這也是我在達到長白山之前少有的具有規模的居民區。比起長春的街頭,這裏的街頭行人要明顯更多一些,露天的市集里是熙熙攘攘前來購買日用百貨品的當地百姓。根據百度百科的資料显示,截至2003年,全鎮區的總人口數為41692人,由漢、滿、錫伯、朝、回等多個民族構成。

因為地理上的邊緣化,這裏居民的生活已經完全實現了自給自足。而木材業則成為了露水河鎮與外界打通的交流途徑,經濟產業的單一化甚至造就了“露水河”牌刨花板這樣的 “中國馳名商標”,其代表性完全不亞於我們常說的“茅台酒”。在整個東北地區,大大小小分佈着與露水河鎮這樣民族結構、經濟條件相類似的集中居民區,依靠生活物質上的自給自足以及單一的經濟產業,繁榮而又不受外界打擾,儼然有着烏托邦小鎮的味道。而這些類似露水河鎮的小鎮,也最能體現闖關東的精髓所在。

一個更具生命力的奇瑞

1999年12月18日,第一輛奇瑞轎車下線。而隨後2007年,憑藉奇瑞QQ的熱銷,奇瑞迅速成為自主品牌為數不多產銷規模達到百萬輛的中國車企。在鮮花與掌聲中,奇瑞開啟了多品牌戰略的時代,但這也成為奇瑞多年發展里的一次波折。而讓人高興的是,在這次的波折以後,有了一個更具生命力的奇瑞出現。標志著奇瑞2.0時代到來的奇瑞T1X模塊化平台讓奇瑞成為第一個應用模塊化平台生產的自主品牌。“未來五年,奇瑞將形成全新三大產品平台,開發10款全新產品。”奇瑞掌門人尹同躍在某次公開場合上如此表示,有了模塊化平台的基礎,奇瑞的產品規模有了更豐富的可能性,正向研發的自給自足將成為奇瑞的標誌之一。而瑞虎7,則是奇瑞闖關東所收穫的第一顆果實。

運動懸挂所帶來的安心

吉林的入夜時間遠比我們想象中的要早,大概是4點,天色就已經大有被黑色吞沒之勢。在露水河到長白山的百餘公里縣道,路燈成了稀缺的物品。與我換手的教練兼拉力賽賽車手,僅憑着車燈照探着鋪滿冰渣的路面。儘管開得再小心、再緩慢,但無數的暗坑或是前車遺留的巨大冰碴還是讓我們難以躲避。幸好瑞虎7前麥弗遜后多連桿的懸挂結構加上偏向於運動的底盤調校風格,讓顛起的車身被迅速拉住,車身的晃動被有效地控制,這才讓我們這群處於黑暗的趕路人不顯狼狽。甚至那不錯的隔音、密封工程,還讓瑞虎7凸顯出了不俗的德系車的高級感。

在睡意將近佔據頭腦全部的時候,我們終於走完了將近500公里的冰雪路,並且在長白山腳的酒店落了腳。雖然長白山的美名遠揚,但商業化的氣息並不過分濃郁。除了長白山萬達國際度假區以外,在夜晚幾乎難以找到能夠提供夜宵的餐館。在某家特色東北餐館囫圇大吃以後,我便早早入睡,為明早登頂長白山蓄力。

長白山的“色彩”

長白山的稱呼來源,源於山上的常年積雪,年均的氣溫-7℃至3℃之間。在朝鮮以及韓國,長白山又被稱呼為白頭山。從最初的汪洋,到後來地殼上升,再經歷前後數次的火山爆發,最終形成了如今的長白山山脈。

歷來居住在長白山周邊的民眾相信長白山的形成是天意使然,長白山是德高望重的山神的化身。因此,祭拜長白山山神成了當地民眾的一種精神寄託。明清時期,長白山的人蔘為朝庭貢品所用,普通民眾嚴禁進山採挖。但仍然有不少山東以及河北地區闖關東的农民出於生活所迫,在官兵的緝拿以及零下數十度的嚴寒中偷采人蔘。為了採挖順利,逐漸衍生出了拜山神的民俗。“三月十六,山神之壽。祭祀山神,把頭保佑。放山快當,棒槌拿夠。風調雨順,年豐人壽。”這樣表達敬重山神的歌謠一直在長白山地區長久傳唱。如今長白山的人蔘產業已經成為當地的一大經濟支柱,甚至還有了“不買長白山人蔘,枉到長白山”一說。所以,闖關東也或多或少地對長白山人蔘這種名貴藥材的興起貢獻良多。

而在朝鮮人的眼中,長白山則充滿了政治的味道,是共產主義勝利的標誌。在第二次世界大戰的1936年至1943年期間,朝鮮共產黨領導人金日成曾率領數萬名朝鮮共產主義戰士與侵朝日軍進行抗爭。在長白山上,修建了後方聯絡站、修械所、出版所、醫院等設施。長白山中一座高1791米的山峰為朝鮮人稱為“正日峰”,以彰顯朝鮮的氣概。在金正日五十壽辰的時候,金日成曾寫下這樣的一首詩:“白頭山頂,正日峰。小白水河,碧溪流。光明星誕,五十周。皆贊文武,忠孝備。萬民稱頌,齊同心。歡呼聲高,震天地,白頭山密營舊居。”

當然,歷史上的長白山全境一直屬中國所有,直到上世紀60年代,才以長白山頂峰的天池為界,把部分山脈劃分給朝鮮,由此長白山成為中朝兩國界山。這種出於兩國友誼而無償劃分國土的行為並不多見,而大多數的中國人也對長白山領土的出讓頗具爭議。但無論如何,至此中國與朝鮮一直是社會主義陣營里關係最堅實的一對。

登上長白山山頂的過程有些艱巨,先是乘觀光大巴爬一小時的山路,爾後再轉乘雪地摩托穿越陡峭的雪峰,最後踩着那些能把小腿陷大半的雪走上數十分鐘。我在即將達到山峰的位置停下了腳步,因為身後那些被夕陽的餘暉所染紅的雪峰、那些繚繞在半山腰的滾滾霧氣已經足夠讓我徹底拋去親近天池的慾望。拿起手機拍照記下這些畫面,然後向著天池的方向虔誠地許上一個願,我認為這是比登頂更具有意義的事。

闖關東就是闖

當然,對於奇瑞來說,攀登自主品牌頂峰才是它最終的目標。不過在登頂之前,瑞虎7產品本身所展現出的自信已經足夠讓我相信:奇瑞能夠造出一台媲美合資品牌的SUV。在《闖關東》里,朱開山說:“闖關東就是闖,這不行,咱到別出去,哪能活我就到哪去。”之於瑞虎7,我想是闖出中國SUV的名堂了。

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

【其他文章推薦】

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

※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

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

※網頁設計最專業,超強功能平台可客製化

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

從10萬的SUV到70萬的豪華轎車,分析銷量最好的熱門車!

緊湊型車中大型車緊湊型SUV總結:金無赤足,人無完人。汽車是個綜合體商品,在一輛車定型之前,工程師要對外觀設計、空間造型、材質用料以及功能配置等綜合起來進行考量,以取得消費者體驗的最佳平衡點,這一切還須建立在產品成本不超標的前提下。

發現十有八九的朋友都是買車以後才開始去了解車,其中對選購的車感到後悔的不知凡幾,你是否其中一員呢?

這些朋友普遍對汽車市場一知半解,不多加體驗,就單憑一款車的外觀、汽車銷量榜和別人片面的評價就為它買賬,一意孤行、不聽勸阻,也甚是無奈。

今年1-10月的汽車總銷量榜單出爐,銷量能否成為購車的參考?告訴你,銷量最好的車未必是產品力最強的車,但一定是最迎合消費者口味的車,對這些公司在營銷方面的造詣深感佩服。下面為你簡單點評幾款熱度相當高的車型。

緊湊型車

中大型車

緊湊型SUV

總結:金無赤足,人無完人。汽車是個綜合體商品,在一輛車定型之前,工程師要對外觀設計、空間造型、材質用料以及功能配置等綜合起來進行考量,以取得消費者體驗的最佳平衡點,這一切還須建立在產品成本不超標的前提下。所以沒有最好的車,只有最適合自己的車。明確個人用車需求、預算,平時多看的推文,總能找到最適合你的車。對了,別吝嗇你的贊!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

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

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※推薦台中搬家公司優質服務,可到府估價

月銷3萬多輛,這款實力出眾的車型即將趕超英朗!

編者先賣個關子,一會再詳細解讀。國人買車最在意的就是性價比,都想花最少的錢,獲得最大的享受。和英朗pK中可以發現,福睿斯標配6氣囊、天窗、真皮坐椅、定速巡航、駐車雷達、皮質座椅等,這些都是消費者特別重視的配置。

在這個社會上,事物的結果都有一定的衡量標準。對於考生而言,試卷上的分數決定他是否能上一所更好的大學;對於公司職員來講,能否提高業績,是他升職加薪的主要原因;同樣,對於一台車來說,銷量的多寡,可以直接看出來他是否得到消費者的滿意和肯定。

銷量是判定這款車是否成功的重要標準。所以在銷量榜上面,你可以發現那些很有價值的信息。尤其是福特福睿斯,這款如此低調的車,但是銷量卻能達到三萬台。

看到福睿斯的銷量如此之高,大家一定會感到意外吧!在這個級別,我們比較熟悉的車型,比如科魯茲,寶來,K3,朗動等,都被福睿斯無情的壓在腳下。至於呼聲更高的別克英朗,銷量和福睿斯也只是“一個車身”的差距。

是騾子是馬拉出來溜溜就知道了,解析一下福睿斯就知道為什麼他可以取得高銷量了。我們就拿同為美系,銷量和福睿斯比較接近的英朗作對比,看看孰優孰劣(至於為什麼不和科魯茲比,是因為他和福睿斯不是一個銷量級別的)。

福睿斯1.5L 自動時尚型(11.98萬元)

VS

英朗 15N 自動進取型(11.99萬元)

既然要對比肯定要選擇同價位的車型,同時兩車的優惠程度要非常接近,這樣可以更公平的進行pK。

兩者車長竟然都是4587mm,這僅僅只是巧合?還是冥冥之中註定必然是對手?當然狹路相逢“大”者勝,福睿斯的每一項尺寸幾乎都要領先英朗,在國內這個以大為美的市場裏面,較大的車身可以更好的俘獲國內消費者的芳心,從這一點來看,福睿斯已經領先第一步了。

英朗採用了別克的家族式設計,直瀑式的前進氣格柵辨識度很高,整體看起來比較中庸、柔和。當然福睿斯也不例外,也是採用了福特的家族式設計,福特家族的標誌性前臉-馬丁臉自然是必不可少的,霸氣的前臉、立體的車身線條,使得福睿斯看起來更加時尚。不過外觀沒有統一的評判標準,主要是消費者喜歡就好。

兩者的乘坐空間較為接近,滿足家用沒問題。有一點需要着重指出來,英朗的底盤雖貴為多連桿獨立懸架,但是日常駕駛並不能感覺出來它是獨立懸架,底盤感覺比較單薄,慮震較差,這是為什麼呢?編者先賣個關子,一會再詳細解讀。

國人買車最在意的就是性價比,都想花最少的錢,獲得最大的享受。和英朗pK中可以發現,福睿斯標配6氣囊、天窗、真皮坐椅、定速巡航、駐車雷達、皮質座椅等,這些都是消費者特別重視的配置。所以就性價比來說,毫無疑問,福睿斯完勝。

對於底盤,有必要細究一下,從圖中可以看出來,現款英朗和已經停產的凱越的底盤結構是一樣的。這時候你就明白為什麼福睿斯在底盤調教上的造詣更高一層,底盤非常紮實厚重,韌性十足,無論是慮震、隔音還是底盤行駛的厚重感,福睿斯都會給你一個不小的驚喜。

隨後我們又發現,英朗和凱越的發動機也是一樣的。目前凱越已經停產,停產原因是車型過於老舊,其實我看未必吧,這很明顯是為英朗讓步罷了,英朗和凱越的底盤、發動機都極其相似,不禁讓我想入非非…這樣的“凱越”,怎麼和福睿斯競爭。

乘坐過這兩個車子的人都會發現和英朗比起來,福睿斯很關注乘客的舒適性,比如座椅的坐墊很厚實,填充物軟硬適中,有一種美式大沙發的感覺,而英朗就相形見絀了,座椅比較單薄包裹性較差,又比如在隔音方面,福睿斯的用料更實在…畢竟福睿斯要比英朗重將近100斤,所以可以理解福睿斯在車身用料方面“更下本”了。

有對比才有傷害。福睿斯在2014年12月30日上市,車型歷史只有1年多的時間,但是卻能在今年10月份斬獲三萬多的銷量。而英朗作為老牌的合資家轎,有着多年的歷史,卻被一個新秀追着打。不過,群眾的眼睛是雪亮的,性價比高的車型,消費者會用手裡的現金去投票的。

福睿斯的銷量,頗有點“扮豬吃老虎”的特點,因為福睿斯平時“話不多”,比較低調,廣告宣傳什麼的也很少見。但是英朗就不一樣了,在很多地方都可以看到關於英朗的宣傳,高銷量也被各種讚譽,比起福睿斯要高調太多了,但是真到了銷量上面,兩者只有微乎其微的差距。

福睿斯最大程度的滿足國內人民的用車需求—以家用為主,但是眾口難調,有些消費者就是想要純粹的駕駛激情,那這個時候,他通常會把關注點轉向福克斯,因為在這個價位的車型裏面,福克斯的操控無出其右,幾乎被當作標杆來看待。福特在這個級別緊密布局了兩個車型,看來確實是仔細研究過國內的用車環境。

追求純粹操控的消費者可以選擇福克斯,想要操控又想要大空間的消費者就會鍾情於福睿斯。因為雙福車型精準的市場定位和強大的產品競爭力,使得它們取得了極大的勝利,雙福在9月份的銷量為51163輛,10月份的銷量為52806輛,取得了驕人的成績。

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

【其他文章推薦】

※超省錢租車方案

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

※回頭車貨運收費標準

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

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※網頁設計最專業,超強功能平台可客製化

心有 netty 一點通!

一、標準的netty線程模型

雙池合璧:

1、連接線程池:

連接線程池專門負責監聽客戶端連接請求,並完成連接的建立(包括諸如握手、安全認證等過程)。

連接的建立本身是一個極其複雜、損耗性能的過程,此處使用線程池,能夠極大的增加處理客戶端連接的能力。

2、I/O線程池:

連接線程池會將成功建立的連接註冊到後端I/O線程池,由I/O線程池負責對相應連接的網絡數據進行讀寫、編解碼處理。

在實際應用中,我們通常會定義相應的業務消息協議,並選擇合適的序列化機制,netty I/O線程池部分根據預設的規則進行數據的編解碼。

二、延伸的業務線程池

 

其實我們這裏說的業務線程池不在網絡層處理邏輯里。處理到I/O線程池部分,所需要的請求數據已經處理完畢,涉及具體的業務處理邏輯,比較複雜的,或者時間、性能消耗特別大的,通常我們會單獨設置相應的線程池來處理。

三、netty的極致性能設計

1、無鎖化設計

I/O線程的內部串行化:

局部無鎖化串行處理,避免多線程切換帶來的複雜性及性能損耗(鎖競爭、CPU資源分配)。至於對於處理能力的考慮,可以通過調整I/O線程池容量來平衡。

盡量避免I/O線程和業務線程混淆及切換。

2、直接內存使用

TCP接收和發送使用直接內存代替堆內存,避免了數據在堆內存和主內存之間的複製消耗,提升了I/O讀取和寫入的性能。

 3、transferTo

依賴於操作系統零拷貝特性直接將緩衝區數據發送到相應的通道。

傳統的方式,先將源文件拷貝到內存,然後由內存寫到目的文件。

netty 利用 NIO FileChannel transferTo方法,通道對通道寫數據。

4、CompositeByteBuf

組合緩存使用可以像操作單個緩存一樣操作多個緩存,避免了傳統的操作方式帶來的內存複製性能消耗。

5、內存池使用

netty支持通過內存池的方式循環利用ByteBuf,避免了頻繁的創建,銷毀ByteBuf帶來的資源及性能損耗。

ByteBuf byte數據緩衝區,是NIO編程的主要對象。高負載情景下,ByteBuf內存池使用,可以有效降低GC頻率。

PoolArena netty的內存池實現類。PoolArena 是由多個Chunk組成的大塊內存區域,每個Chunk由一個多個Page組成。

Chunk:組織管理Page的內存分配和釋放,Page被構建為二叉樹形式:

PoolSubpage:對於小於Page的內存使用,直接在Page中完成分配,每個Page切分為大小相同的多個存儲塊兒,存儲塊兒的大小由第一次申請的內存塊兒大小決定。

回收:netty使用狀態位標識Chunk及Page內存可用性,Chunk標識二叉樹Page節點使用狀態;Page標識內部內存塊兒的使用狀態。

6、線程安全優化

合理的使用線程安全容器、原子類等,提升系統的併發處理能力,

7、引用計數器

通過引用計數器及時的申請釋放不再引用的對象,細粒度的內存管理降低了GC的頻率,減少GC帶來的時延增大和CPU損耗。

Netty 4中 ByteBuf 和 ByteBufHolder 引入引用計數器功能(實現ReferenceCounted接口),在特定的對象上跟蹤引用的數目。

引用計數器初始為1。如果對象活動的引用計數器大於0,則不會被釋放。當引用計數減少到0,實例將會被釋放。這也是 PooledByteBufAllocator 內存池應用的核心特性。

 

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

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

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

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

STM32的8*8點陣屏開發(小項目)

基礎認識

 實現效果

項目實現STM32點陣屏的操作,自動更改显示內容和串口控制显示內容

STM32上電后:

1)   程序將進行行和列的刷新

2)   自動遞增显示0-9變化

3)   進行矩形由內向外動畫

4)   等等串口輸出控制,輸出範圍為0x00-0x09,點陣屏將显示輸入的数字

代碼為精簡的最小系統,方便後續的擴展和移植

視頻展示

https://www.bilibili.com/video/BV1Pi4y1x7Fo

環境配置

STM32固件版本:V3.5.0

單片機:STM32 F103C8T6

LED點陣管數碼管:共陽1588BS

編程工具:Keil uVision5

 LED點陣管數碼管認識

1.5英寸LED點陣管數碼管8*8紅色16pin

有如下兩種型號:

l  共陽1588BS

l  共陰1588AS

這裏使用的是:共陽1588BS

開始使用

 環境準備

l  STM32固件版本:V3.5.0

l  單片機:STM32 F103C8T6

l  LED點陣管數碼管:共陽1588BS

l  編程工具:Keil uVision5

 點陣屏與STM32接線說明

接線編號:

點陣屏1-8:A0、A1、A2、A3、A4、A5、A6、A7

點陣屏9-16:B0、B1、B10、B11、B12、B13、B14、B15

打開/編譯/燒寫

 

 

 項目測試

打開串口助手

 

連接USB串口模塊

上電后自動進行行列刷新

 

数字自動显示

 

 

小動畫显示

 

串口控制:

 編碼說明

 

 

分析得到編碼序列:

因為列是固定為低電平,也就是只要行輸出高電平,對應的點就點亮,確定行的高低位,設置從上到下為0-7行,所以第0行是十六進制的最低位而7是16進制的最高位。

得到結果分析:

第0列編碼:0000 0000 = 0x00

第1列編碼:0111 1110 = 0x7E

第2列編碼:1010 0001 = 0xA1

第3列編碼:1001 0001 = 0x91

第4列編碼:1000 1001 = 0x89

第5列編碼:1000 0101 = 0x85

第6列編碼:0111 1110 = 0x7E

第7列編碼:0000 0000 = 0x00

所以得到数字0的編碼數組為:

{0x00,0x7E,0xA1,0x91,0x89,0x85,0x7E,0x00}

 

視頻展示

https://www.bilibili.com/video/BV1Pi4y1x7Fo

 

以下內容不完全展示…….

獲取工程文件請私聊或評論(*๓´╰╯`๓)

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

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

※網頁設計最專業,超強功能平台可客製化

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

小師妹學JavaIO之:Buffer和Buff

目錄

  • 簡介
  • Buffer是什麼
  • Buffer進階
  • 創建Buffer
  • Direct VS non-Direct
  • Buffer的日常操作
    • 向Buffer寫數據
    • 從Buffer讀數據
    • rewind Buffer
    • Compact Buffer
    • duplicate Buffer
  • 總結

簡介

小師妹在學習NIO的路上越走越遠,唯一能夠幫到她的就是在她需要的時候給她以全力的支持。什麼都不說了,今天介紹的是NIO的基礎Buffer。老鐵給我上個Buff。

Buffer是什麼

小師妹:F師兄,這個Buffer是我們縱橫王者峽谷中那句:老鐵給我加個Buff的意思嗎?

當然不是了,此Buffer非彼Buff,Buffer是NIO的基礎,沒有Buffer就沒有NIO,沒有Buffer就沒有今天的java。

因為NIO是按Block來讀取數據的,這個一個Block就可以看做是一個Buffer。我們在Buffer中存儲要讀取的數據和要寫入的數據,通過Buffer來提高讀取和寫入的效率。

更多精彩內容且看:

  • 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
  • Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
  • Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
  • java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程

更多內容請訪問www.flydean.com

還記得java對象的底層存儲單位是什麼嗎?

小師妹:這個我知道,java對象的底層存儲單位是字節Byte。

對,我們看下Buffer的繼承圖:

Buffer是一個接口,它下面有諸多實現,包括最基本的ByteBuffer和其他的基本類型封裝的其他Buffer。

小師妹:F師兄,有ByteBuffer不就夠了嗎?還要其他的類型Buffer做什麼?

小師妹,山珍再好,也有吃膩的時候,偶爾也要換個蘿蔔白菜啥的,你以為乾隆下江南都幹了些啥?

ByteBuffer雖然好用,但是它畢竟是最小的單位,在它之上我們還有Char,int,Double,Short等等基礎類型,為了簡單起見,我們也給他們都搞一套Buffer。

Buffer進階

小師妹:F師兄,既然Buffer是這些基礎類型的集合,為什麼不直接用結合來表示呢?給他們封裝成一個對象,好像有點多餘。

我們既然在面向對象的世界,從表面來看自然是使用Object比較合乎情理,從底層的本質上看,這些封裝的Buffer包含了一些額外的元數據信息,並且還提供了一些意想不到的功能。

上圖列出了Buffer中的幾個關鍵的概念,分別是Capacity,Limit,Position和Mark。Buffer底層的本質是數組,我們以ByteBuffer為例,它的底層是:

final byte[] hb; 
  • Capacity表示的是該Buffer能夠承載元素的最大數目,這個是在Buffer創建初期就設置的,不可以被改變。
  • Limit表示的Buffer中可以被訪問的元素個數,也就是說Buffer中存活的元素個數。
  • Position表示的是下一個可以被訪問元素的index,可以通過put和get方法進行自動更新。
  • Mark表示的是歷史index,當我們調用mark方法的時候,會把設置Mark為當前的position,通過調用reset方法把Mark的值恢復到position中。

創建Buffer

小師妹:F師兄呀,這麼多Buffer創建起來是不是很麻煩?有沒有什麼快捷的使用辦法?

一般來說創建Buffer有兩種方法,一種叫做allocate,一種叫做wrap。

public void createBuffer(){
        IntBuffer intBuffer= IntBuffer.allocate(10);
        log.info("{}",intBuffer);
        log.info("{}",intBuffer.hasArray());
        int[] intArray=new int[10];
        IntBuffer intBuffer2= IntBuffer.wrap(intArray);
        log.info("{}",intBuffer2);
        IntBuffer intBuffer3= IntBuffer.wrap(intArray,2,5);
        log.info("{}",intBuffer3);
        intBuffer3.clear();
        log.info("{}",intBuffer3);
        log.info("{}",intBuffer3.hasArray());
    }

allocate可以為Buffer分配一個空間,wrap同樣為Buffer分配一個空間,不同的是這個空間背後的數組是自定義的,wrap還支持三個參數的方法,後面兩個參數分別是offset和length。

INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=0 lim=10 cap=10]
INFO com.flydean.BufferUsage - true
INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=0 lim=10 cap=10]
INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=2 lim=7 cap=10]
INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=0 lim=10 cap=10]
INFO com.flydean.BufferUsage - true

hasArray用來判斷該Buffer的底層是不是數組實現的,可以看到,不管是wrap還是allocate,其底層都是數組。

需要注意的一點,最後,我們調用了clear方法,clear方法調用之後,我們發現Buffer的position和limit都被重置了。這說明wrap的三個參數方法設定的只是初始值,可以被重置。

Direct VS non-Direct

小師妹:F師兄,你說了兩種創建Buffer的方法,但是兩種Buffer的後台都是數組,難道還有非數組的Buffer嗎?

自然是有的,但是只有ByteBuffer有。ByteBuffer有一個allocateDirect方法,可以分配Direct Buffer。

小師妹:Direct和非Direct有什麼區別呢?

Direct Buffer就是說,不需要在用戶空間再複製拷貝一份數據,直接在虛擬地址映射空間中進行操作。這叫Direct。這樣做的好處就是快。缺點就是在分配和銷毀的時候會佔用更多的資源,並且因為Direct Buffer不在用戶空間之內,所以也不受垃圾回收機制的管轄。

所以通常來說只有在數據量比較大,生命周期比較長的數據來使用Direct Buffer。

看下代碼:

public void createByteBuffer() throws IOException {
        ByteBuffer byteBuffer= ByteBuffer.allocateDirect(10);
        log.info("{}",byteBuffer);
        log.info("{}",byteBuffer.hasArray());
        log.info("{}",byteBuffer.isDirect());

        try (RandomAccessFile aFile = new RandomAccessFile("src/main/resources/www.flydean.com", "r");
             FileChannel inChannel = aFile.getChannel()) {
            MappedByteBuffer buffer = inChannel.map(FileChannel.MapMode.READ_ONLY, 0, inChannel.size());
            log.info("{}",buffer);
            log.info("{}",buffer.hasArray());
            log.info("{}",buffer.isDirect());
        }
    }

除了allocateDirect,使用FileChannel的map方法也可以得到一個Direct的MappedByteBuffer。

上面的例子輸出結果:

INFO com.flydean.BufferUsage - java.nio.DirectByteBuffer[pos=0 lim=10 cap=10]
INFO com.flydean.BufferUsage - false
INFO com.flydean.BufferUsage - true
INFO com.flydean.BufferUsage - java.nio.DirectByteBufferR[pos=0 lim=0 cap=0]
INFO com.flydean.BufferUsage - false
INFO com.flydean.BufferUsage - true

Buffer的日常操作

小師妹:F師兄,看起來Buffer確實有那麼一點複雜,那麼Buffer都有哪些操作呢?

Buffer的操作有很多,下面我們一一來講解。

向Buffer寫數據

向Buffer寫數據可以調用Buffer的put方法:

public void putBuffer(){
        IntBuffer intBuffer= IntBuffer.allocate(10);
        intBuffer.put(1).put(2).put(3);
        log.info("{}",intBuffer.array());
        intBuffer.put(0,4);
        log.info("{}",intBuffer.array());
    }

因為put方法返回的還是一個IntBuffer類,所以Buffer的put方法可以像Stream那樣連寫。

同時,我們還可以指定put在什麼位置。上面的代碼輸出:

INFO com.flydean.BufferUsage - [1, 2, 3, 0, 0, 0, 0, 0, 0, 0]
INFO com.flydean.BufferUsage - [4, 2, 3, 0, 0, 0, 0, 0, 0, 0]

從Buffer讀數據

讀數據使用get方法,但是在get方法之前我們需要調用flip方法。

flip方法是做什麼用的呢?上面講到Buffer有個position和limit字段,position會隨着get或者put的方法自動指向後面一個元素,而limit表示的是該Buffer中有多少可用元素。

如果我們要讀取Buffer的值則會從positon開始到limit結束:

public void getBuffer(){
        IntBuffer intBuffer= IntBuffer.allocate(10);
        intBuffer.put(1).put(2).put(3);
        intBuffer.flip();
        while (intBuffer.hasRemaining()) {
            log.info("{}",intBuffer.get());
        }
        intBuffer.clear();
    }

可以通過hasRemaining來判斷是否還有下一個元素。通過調用clear來清除Buffer,以供下次使用。

rewind Buffer

rewind和flip很類似,不同之處在於rewind不會改變limit的值,只會將position重置為0。

public void rewindBuffer(){
        IntBuffer intBuffer= IntBuffer.allocate(10);
        intBuffer.put(1).put(2).put(3);
        log.info("{}",intBuffer);
        intBuffer.rewind();
        log.info("{}",intBuffer);
    }

上面的結果輸出:

INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=3 lim=10 cap=10]
INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=0 lim=10 cap=10]

Compact Buffer

Buffer還有一個compact方法,顧名思義compact就是壓縮的意思,就是把Buffer從當前position到limit的值賦值到position為0的位置:

public void useCompact(){
        IntBuffer intBuffer= IntBuffer.allocate(10);
        intBuffer.put(1).put(2).put(3);
        intBuffer.flip();
        log.info("{}",intBuffer);
        intBuffer.get();
        intBuffer.compact();
        log.info("{}",intBuffer);
        log.info("{}",intBuffer.array());
    }

上面代碼輸出:

INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=0 lim=3 cap=10]
INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=2 lim=10 cap=10]
INFO com.flydean.BufferUsage - [2, 3, 3, 0, 0, 0, 0, 0, 0, 0]

duplicate Buffer

最後我們講一下複製Buffer,有三種方法,duplicate,asReadOnlyBuffer,和slice。

duplicate就是拷貝原Buffer的position,limit和mark,它和原Buffer是共享原始數據的。所以修改了duplicate之後的Buffer也會同時修改原Buffer。

如果用asReadOnlyBuffer就不允許拷貝之後的Buffer進行修改。

slice也是readOnly的,不過它拷貝的是從原Buffer的position到limit-position之間的部分。

public void duplicateBuffer(){
        IntBuffer intBuffer= IntBuffer.allocate(10);
        intBuffer.put(1).put(2).put(3);
        log.info("{}",intBuffer);
        IntBuffer duplicateBuffer=intBuffer.duplicate();
        log.info("{}",duplicateBuffer);
        IntBuffer readOnlyBuffer=intBuffer.asReadOnlyBuffer();
        log.info("{}",readOnlyBuffer);
        IntBuffer sliceBuffer=intBuffer.slice();
        log.info("{}",sliceBuffer);
    }

輸出結果:

INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=3 lim=10 cap=10]
INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=3 lim=10 cap=10]
INFO com.flydean.BufferUsage - java.nio.HeapIntBufferR[pos=3 lim=10 cap=10]
INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=0 lim=7 cap=7]

總結

今天給小師妹介紹了Buffer的原理和基本操作。

本文的例子https://github.com/ddean2009/learn-java-io-nio

本文作者:flydean程序那些事

本文鏈接:http://www.flydean.com/java-io-nio-buffer/

本文來源:flydean的博客

歡迎關注我的公眾號:程序那些事,更多精彩等着您!

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

【其他文章推薦】

※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

※網頁設計最專業,超強功能平台可客製化

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

動手造輪子:實現一個簡單的依賴注入(三) — 支持屬性注入

動手造輪子:實現一個簡單的依賴注入(三) — 支持屬性注入

Intro

前面寫了幾篇依賴注入的文章,有興趣的小夥伴可以參考文末 Reference 部分中的鏈接,一直有小夥伴希望增加屬性注入的支持,昨天試着加了一下,思路很簡單,在獲取到服務實例之後檢查實例中有沒有需要注入的屬性,如果有並且不為 null 就從服務容器中獲取一個對應屬性類型的實例

代碼修改

FromServiceAttribute

完整的代碼修改可以參考這個 commit https://github.com/WeihanLi/WeihanLi.Common/commit/91dc0b515d12e7c036771fba9419824cd0219544

首先我們需要增加一個 FromServiceAttribute 用來標識哪些屬性需要注入,代碼如下:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
public sealed class FromServiceAttribute : Attribute
{
}

這裏 AttributeTargets 除了屬性之外增加了字段和參數,是想可能以後會用到,參數典型的應用場景就是類似於 asp.net core 里的 [FromServices] 用來實現方法注入參數

EnrichObject

增加了一個 EnrichObject 方法,用來在獲取到服務實例之後,對服務實例做一些補充的配置,如我們要加的屬性注入,如果我們要加字段注入等也可以在這個方法內完成,來看實現:

private object EnrichObject(object obj)
{
    if (null != obj)
    {
        // PropertyInjection
        var type = obj.GetType();
        foreach (var property in CacheUtil.TypePropertyCache.GetOrAdd(type, t => t.GetProperties())
            .Where(x => x.IsDefined(typeof(FromServiceAttribute))))
        {
            if (property.GetValueGetter()?.Invoke(obj) == null)
            {
                property.GetValueSetter()?.Invoke(
                    obj,
                    GetService(property.PropertyType)
                    );
            }
        }
    }

    return obj;
}

上面的邏輯就是獲取這個 object 定義的所有需要注入的屬性,如果屬性的值不為 null 則,從服務容器中獲取對應的服務實例,之所以要檢查是不是null

上面的 CacheUtil.TypePropertyCache 是一個 Type 為 key,PropertyInfo 數組為 Value 的併發字典,用來緩存類型的屬性

GetValueGetter/GetValueSetter 是 PropertyInfo 的擴展方法,利用表達式樹和緩存提高屬性 Get/Set 的效率

GetSertviceInstance

修改原來的 GetServiceInstance 方法為 GetServiceInstanceInternal,增加一個一樣的方法,實現邏輯是在 GetServiceInstanceInternal 的基礎上調用上面的 Enrich 方法來實現屬性注入

More

雖然增加了屬性注入的支持,但是還是不太推薦使用,從上面屬性注入的代碼中可以看得到,如果用不好很容易出現循環依賴的問題,而且用構造器注入的話依賴關係很清晰,分析方法的構造方法即可,如果要使用屬性注入請謹慎使用

Reference

  • https://github.com/WeihanLi/WeihanLi.Common/commit/91dc0b515d12e7c036771fba9419824cd0219544
  • https://github.com/WeihanLi/WeihanLi.Common/tree/dev/src/WeihanLi.Common/DependencyInjection
  • https://www.cnblogs.com/weihanli/p/implement-dependency-injection.html
  • https://www.cnblogs.com/weihanli/p/implement-dependency-injection-01.html
  • https://www.cnblogs.com/weihanli/p/implement-dependency-injection-02.html

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

【其他文章推薦】

※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

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

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

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

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

※網頁設計最專業,超強功能平台可客製化

※回頭車貨運收費標準

Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何選擇流處理框架

根據最新的統計显示,僅在過去的兩年中,當今世界上90%的數據都是在新產生的,每天創建2.5萬億字節的數據,並且隨着新設備,傳感器和技術的出現,數據增長速度可能會進一步加快。
從技術上講,這意味着我們的大數據處理將變得更加複雜且更具挑戰性。而且,許多用例(例如,移動應用廣告,欺詐檢測,出租車預訂,病人監護等)都需要在數據到達時進行實時數據處理,以便做出快速可行的決策。這就是為什麼分佈式流處理在大數據世界中變得非常流行的原因。

如今,有許多可用的開源流框架。有趣的是,幾乎所有它們都是相當新的,僅在最近幾年才開發出來。因此,對於新手來說,很容易混淆流框架之間的理解和區分。在本文中,我將首先大致討論流處理的類型和方面,然後比較最受歡迎的開源流框架:Flink,SparkStreaming,Storm,KafkaStream。我將嘗試(簡要地)解釋它們的工作原理,它們的用例,優勢,局限性,異同。

什麼是流/流處理:

流處理的最優雅的定義是:一種數據處理引擎,其設計時考慮了無限的數據集。

與批處理不同,批處理以工作中的開始和結束為界,而工作是在處理有限數據之後完成的,而流處理則是指連續不斷地處理天,月,年和永久到來的無邊界數據。因此,流媒體應用程序始終需要啟動和運行,因此難以實現且難以維護。

流處理的重要方面:

為了理解任何Streaming框架的優點和局限性,我們應該了解與Stream處理相關的一些重要特徵和術語:

  • 交付保證:
    這意味着無論如何,流引擎中的特定傳入記錄都將得到處理的保證。可以是at least once(至少一次)(即使發生故障也至少處理一次),at most once : 至多一次(如果發生故障則可能不處理)或Exactly-once(即使失敗在這種情況下也只能處理一次))。顯然,只處理一次是最好的,但是很難在分佈式系統中實現,並且需要權衡性能。
  • 容錯:
    如果發生諸如節點故障,網絡故障等故障,框架應該能夠恢復,並且應該從其離開的位置開始重新處理。這是通過不時檢查流向某些持久性存儲的狀態來實現的。例如,從Kafka獲取記錄並對其進行處理后,將Kafka檢查點偏移給Zookeeper。
  • 狀態管理:在有狀態處理需求的情況下,我們需要保持某種狀態(例如,記錄中每個不重複單詞的計數),框架應該能夠提供某種機制來保存和更新狀態信息。
  • 性能:
    這包括延遲(可以多久處理一條記錄),吞吐量(每秒處理的記錄數)和可伸縮性。延遲應盡可能小,而吞吐量應盡可能大。很難同時獲得兩者。
  • 高級功能:事件時間處理,水印,窗口化
    如果流處理要求很複雜,這些是必需的功能。例如,根據在源中生成記錄的時間來處理記錄(事件時間處理)。
  • 成熟度:從採用的角度來看很重要,如果框架已經過大公司的驗證和大規模測試,那就太好了。更有可能獲得良好的社區支持並在堆棧溢出方面提供幫助。

流處理的兩種類型:

現在了解了我們剛剛討論的術語,現在很容易理解,有兩種方法可以實現Streaming框架:

原生流處理:
這意味着每條到達的記錄都會在到達后立即處理,而無需等待其他記錄。有一些連續運行的過程(根據框架,我們稱之為操作員/任務/螺栓),這些過程將永遠運行,每條記錄都將通過這些過程進行處理。示例:Storm,Flink,Kafka Streams,Samza。

微批處理:
也稱為快速批處理。這意味着每隔幾秒鐘就會將傳入的記錄分批處理,然後以單個小批處理的方式處理,延遲幾秒鐘。例如:Spark Streaming, Storm-Trident。

兩種方法都有其優點和缺點。
原生流傳輸感覺很自然,因為每條記錄都會在到達記錄后立即進行處理,從而使框架能夠實現最小的延遲。但這也意味着在不影響吞吐量的情況下很難實現容錯,因為對於每條記錄,我們都需要在處理後跟蹤和檢查點。而且,狀態管理很容易,因為有長時間運行的進程可以輕鬆維護所需的狀態。

另一方面,微批處理則完全相反。容錯是免費提供的,因為它本質上是一個批處理,吞吐量也很高,因為處理和檢查點將在一組記錄中一次性完成。但這會花費一定的等待時間,並且感覺不自然。高效的狀態管理也將是維持的挑戰。

流框架對比:

Storm :

Storm是流處理世界的強者。它是最古老的開源流框架,也是最成熟和可靠的框架之一。這是真正的流傳輸,適合基於簡單事件的用例。

優點:

  • 極低的延遲,真正的流,成熟和高吞吐量
  • 非常適合簡單的流媒體用例

缺點

  • 沒有狀態管理
  • 沒有高級功能,例如事件時間處理,聚合,開窗,會話,水印等
  • 一次保證

Spark Streaming :

Spark已成為批處理中hadoop的真正繼任者,並且是第一個完全支持Lambda架構的框架(在該框架中,實現了批處理和流傳輸;實現了正確性的批處理;實現了流傳輸的速度)。它非常受歡迎,成熟並被廣泛採用。Spark Streaming是隨Spark免費提供的,它使用微批處理進行流媒體處理。在2.0版本之前,Spark Streaming有一些嚴重的性能限制,但是在新版本2.0+中,它被稱為結構化流,並具有許多良好的功能,例如自定義內存管理(類似flink),水印,事件時間處理支持等。另外,結構化流媒體更加抽象,在2.3.0版本以後,可以選擇在微批量和連續流媒體模式之間進行切換。連續流模式有望帶來像Storm和Flink這樣的子延遲,但是它仍處於起步階段,操作上有很多限制。

優點:

  • 支持Lambda架構,Spark免費提供
  • 高吞吐量,適用於不需要亞延遲的許多使用情況
  • 由於微批量性質,默認情況下具有容錯能力
  • 簡單易用的高級API
  • 龐大的社區和积極的改進
  • 恰好一次

缺點

  • 不是真正的流,不適合低延遲要求

  • 要調整的參數太多。很難做到正確。

  • 天生無國籍

  • 在許多高級功能方面落後於Flink

Flink :

Flink也來自類似Spark這樣的學術背景。Spark來自加州大學伯克利分校,而Flink來自柏林工業大學。像Spark一樣,它也支持Lambda架構。但是實現與Spark完全相反。雖然Spark本質上是一個批處理,其中Spark流是微批處理,並且是Spark Batch的特例,但Flink本質上是一個真正的流引擎,將批處理視為帶邊界數據流的特例。儘管這兩個框架中的API都是相似的,但是它們在實現上沒有任何相似性。在Flink中,諸如map,filter,reduce等的每個函數都實現為長時間運行的運算符(類似於Storm中的Bolt)

Flink看起來像是Storm的真正繼承者,就像Spark批量繼承了hadoop一樣。

優點:

  • 開源流媒體領域創新的領導者
  • 具有所有高級功能(例如事件時間處理,水印等)的第一個True流框架
  • 低延遲,高吞吐量,可根據要求進行配置
  • 自動調整,無需調整太多參數
  • 恰好一次
  • 被Uber,阿里巴巴等大型公司廣泛接受。

缺點

  • 起步較晚,最初缺乏採用

  • 社區不如Spark大,但現在正在快速發展

Kafka Streams :

與其他流框架不同,Kafka Streams是一個輕量級的庫。對於從Kafka流式傳輸數據,進行轉換然後發送回kafka很有用。我們可以將其理解為類似於Java Executor服務線程池的庫,但具有對Kafka的內置支持。它可以與任何應用程序很好地集成,並且可以立即使用。

由於其重量輕的特性,可用於微服務類型的體繫結構。Flink在性能方面沒有匹配之處,而且不需要運行單獨的集群,非常方便並且易於部署和開始工作。

Kafka Streams的一個主要優點是它的處理是完全精確的端到端。可能是因為來源和目的地均為Kafka以及從2017年6月左右發布的Kafka 0.11版本開始,僅支持一次。要啟用此功能,我們只需要啟用一個標誌即可使用。

優點:

  • 重量很輕的庫,適合微服務,IOT應用
  • 不需要專用集群
  • 繼承卡夫卡的所有優良特性
  • 支持流連接,內部使用rocksDb維護狀態。
  • 恰好一次(從Kafka 0.11開始)。

缺點

  • 與卡夫卡緊密結合,在沒有卡夫卡的情況下無法使用
  • 嬰兒期還很新,尚待大公司測試
  • 不適用於繁重的工作,例如Spark Streaming,Flink。

Samza :

簡短介紹一下Samza。(Samza)看上去就像是(Kafka Streams)。有很多相似之處。這兩個框架都是由同一位開發人員開發的,這些開發人員在LinkedIn上實現了Samza,然後在他們創建Kafka Streams的地方成立了Confluent。這兩種技術都與Kafka緊密結合,從Kafka獲取原始數據,然後將處理后的數據放回Kafka。使用相同的Kafka Log哲學。Samza是Kafka Streams的縮放版本。Kafka Streams是一個用於微服務的庫,而Samza是在Yarn上運行的完整框架集群處理。
優點 :

  • 使用rocksDb和kafka日誌可以很好地維護大量信息狀態(適合於連接流的用例)。
  • 使用Kafka屬性的容錯和高性能
  • 如果已在處理管道中使用Yarn和Kafka,則要考慮的選項之一。
  • 低延遲,高吞吐量,成熟並經過大規模測試

缺點:

  • 與Kafka和Yarn緊密結合。如果這些都不在您的處理管道中,則不容易使用。
  • 至少一次加工保證。我不確定它是否像Kafka 0.11之後的Kafka Streams現在完全支持一次
  • 缺少高級流功能,例如水印,會話,觸發器等

流框架比較:

我們只能將技術與類似產品進行比較。儘管Storm,Kafka Streams和Samza現在對於更簡單的用例很有用,但具有最新功能的重量級產品之間的真正競爭顯而易見:Spark vs Flink

當我們談論比較時,我們通常會問:給我看数字

基準測試是僅當第三方進行比較時比較的好方法。

例如,但這是在Spark Streaming 2.0之前的某個時期,當時它受RDD的限制。
現在,隨着Structured Streaming 2.0版本的發布,Spark Streaming試圖趕上很多潮流,而且似乎還會面臨艱巨的挑戰。

最近,基準測試已成為Spark和Flink之間的一場激烈爭吵。

最好不要相信這些天的基準測試,因為即使很小的調整也可以完全改變数字。沒有什麼比決定之前嘗試和測試自己更好。
到目前為止,很明顯,Flink在流分析領域處於領先地位,它具有大多數所需的方面,例如精確一次,吞吐量,延遲,狀態管理,容錯,高級功能等。

Flink的一個重要問題是成熟度和採用水平,直到一段時間之前,但是現在像Uber,Alibaba,CapitalOne這樣的公司正在大規模使用Flink流傳輸,證明了Flink Streaming的潛力。

最近,Uber開源了其最新的流分析框架AthenaX,該框架基於Flink引擎構建。

如果您已經注意到,需要注意的重要一點是,所有支持狀態管理的原生流框架(例如Flink,Kafka Streams,Samza)在內部都使用RocksDb。RocksDb從某種意義上說是獨一無二的,它在每個節點上本地保持持久狀態,並且性能很高。它已成為新流系統的關鍵部分。

如何選擇最佳的流媒體框架:

這是最重要的部分。誠實的答案是:這取決於 :

必須牢記,對於每個用例,沒有一個單一的處理框架可以成為萬靈丹。每個框架都有其優點和局限性。儘管如此,根據一些經驗,他們仍然會分享一些有助於做出決定的建議:

  1. 取決於用例:
    如果用例很簡單,那麼如果學習和實現起來很複雜,則無需尋求最新,最好的框架。在很大程度上取決於我們願意投資多少來換取我們想要的回報。例如,如果它是基於事件的簡單IOT事件警報系統,那麼Storm或Kafka Streams非常適合使用。
  2. 未來考慮因素:
    同時,我們還需要對未來可能的用例進行自覺考慮。將來可能會出現對諸如事件時間處理,聚合,流加入等高級功能的需求嗎?如果答案是肯定的,則最好繼續使用高級流框架(例如Spark Streaming或Flink)。一旦對一項技術進行了投資和實施,其變更的困難和巨大成本將在以後改變。例如,在之前的公司中,從過去的兩年開始,Storm管道就已經啟動並運行,並且在要求統一輸入事件並僅報告唯一事件之前,它一直運行良好。現在,這需要狀態管理,而Storm本身並不支持這種狀態管理。雖然我使用基於時間的內存哈希表實現,但是在重啟時狀態會消失是有限制的。
  3. 我要提出的觀點是,如果我們嘗試自行實現框架未明確提供的某些內容,則勢必會遇到未知問題。
  4. 現有技術堆棧:
    另一重要點是考慮現有技術堆棧。如果現有堆棧的首尾相連是Kafka,則Kafka Streams或Samza可能更容易安裝。同樣,如果處理管道基於Lambda架構,並且Spark Ba​​tch或Flink Batch已經到位,則考慮使用Spark Streaming或Flink Streaming是有意義的。例如,在我以前的項目中,我已經在管道中添加了Spark Ba​​tch,因此,當流需求到來時,選擇需要幾乎相同的技能和代碼庫的Spark Streaming非常容易。

簡而言之,如果我們很好地了解框架的優點和局限性以及用例,那麼選擇或至少過濾掉可用的選項就更加容易。最後,一旦選擇了幾個選項。畢竟每個人都有不同的選擇。

Streaming的發展速度如此之快,以至於在信息方面,此帖子可能在幾年後已經過時。目前,Spark和Flink在開發方面是領先的重量級人物,但仍有一些新手可以加入比賽。Apache Apex是其中之一。還有一些我沒有介紹的專有流解決方案,例如Google Dataflow。我的這篇文章的目的是幫助剛接觸流技術的人以最少的術語理解流技術的一些核心概念,以及流行的開源流框架的優點,局限性和用例。希望該文章對您有所幫助。

更多實時數據分析相關博文與科技資訊,歡迎關注 “實時流式計算”

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

【其他文章推薦】

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

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※南投搬家公司費用需注意的眉眉角角,別等搬了再說!

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

※回頭車貨運收費標準

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