40億條/秒!Flink流批一體在阿里雙11首次落地的背後

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"今年的雙11,實時計算處理的流量洪峯創紀錄地達到了每秒40億條的記錄,數據體量也達到了驚人的每秒7TB,基於Flink的流批一體數據應用開始在阿里巴巴最核心的數據業務場景嶄露頭角,並在穩定性、性能和效率方面都經受住了嚴苛的生產考驗。本文深度解析“流批一體”在阿里核心數據場景首次落地的實踐經驗,回顧“流批一體”大數據處理技術的發展歷程。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"隨着 11 月 11 日 12 點鐘聲的敲響,2020 年雙 11 的 GMV 數字定格在了 4982 億,在 Flink 實時計算技術的驅動下全程保持了絲般順滑滾動,基於 Flink 的阿里巴巴實時計算平臺也圓滿完成了今年雙 11 整體經濟體的實時數據任務保障,再次平穩度過全年大考。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"除了 GMV 媒體大屏之外,Flink 還支持了諸如搜索推薦實時機器學習,廣告實時反作弊,菜鳥訂單狀態實時跟蹤反饋,雲服務器的實時攻擊探測以及大量基礎設施的監控報警等等重要業務。實時業務量和數據量每年都在大幅增長,今年的實時計算峯值達到了創紀錄的每秒 40 億條記錄,數據體量也達到了驚人的7 TB 每秒,相當於一秒鐘需要讀完 500 萬本《新華字典》。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"截止目前,我們的實時計算作業數達到了 35000 多個,集羣總計算規模也達到了超過 150 萬核,在中國乃至世界範圍內都處於領先水平。至此,Flink 已經支持了阿里經濟體所有的實時計算需求,實現了全鏈路數據實時化,第一時間爲消費者、商家以及運營人員帶來了數據的價值。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但今年 Flink 技術演進帶來的價值不僅於此,基於 Flink 的流批一體數據應用也開始在阿里巴巴最核心的數據業務場景嶄露頭角,並在穩定性、性能和效率方面都經受住了嚴苛的生產考驗。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/wechat\/images\/ab\/ab777527861be69ff2fa64b32a95140b.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":false,"pastePass":false}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"“流批一體”在阿里核心數據場景首次落地"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"事實上,Flink 流批一體技術很早就在阿里巴巴內部開始應用了。Flink 在阿里的發展始於搜索推薦場景,因此搜索引擎的索引構建以及機器學習的特徵工程都已經是基於 Flink的 批流一體架構。今年雙11,Flink 更進一步,利用流批一體計算能力,助力數據中臺實現更加精準的實時離線交叉數據分析和業務決策。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"阿里的數據報表分爲實時和離線兩種,前者在諸如雙 11 大促場景下的作用尤爲明顯,可以爲商家、運營以及管理層提供各種維度的實時數據信息,並幫助其及時作出決策,提升平臺和業務效率。例如:在典型的營銷數據實時分析場景,運營和決策層需要對比大促當天某個時間段和歷史某個時間段的數據結果(比如大促當天 10 點的成交額和昨天 10 點成交額的對比),從而判斷當前營銷的效果,以及是否需要進行調控、如何調控等策略。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在上面這種營銷數據分析場景下,實際上需要兩套數據分析結果,一套是基於批處理技術在每天晚上計算出的離線數據報表,一套是基於流處理技術算出當天的實時數據報表,然後針對實時和歷史數據進行對比分析,根據對比結果進行相關決策。離線和實時報表分別是基於批和流兩種不同計算引擎產出,即批和流分離的架構不僅會有兩套開發成本,更難以解決的是數據邏輯和口徑對齊問題,很難保證兩套技術開發出的數據統計結果是一致的。因此,理想的解決方案就是利用一套流批一體的計算引擎進行數據分析,這樣離線和實時報表將天然一致。鑑於 Flink 流批一體計算技術的不斷成熟,以及前期在搜索推薦場景的成功落地,今年雙 11 數據平臺開發團隊也展示出堅定的信心和信任,與 Flink 實時計算團隊並肩作戰,共同推動實時計算平臺技術升級,第一次讓基於 Flink 的流批一體數據處理技術在雙 11 最核心的數據場景順利落地。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/wechat\/images\/5f\/5ff98056b9098310a9dc46de9d380674.jpeg","alt":null,"title":null,"style":null,"href":null,"fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"今年由 Flink 團隊和數據平臺團隊共同推動的流批一體計算框架在雙 11 數據核心場景成功首秀,也得到了阿里數據中臺負責人朋新宇在業務層的認可:流批一體在技術上,實現了哪怕是多個計算處理模式,也只需要撰寫一套代碼就能兼容。在計算速度上比其他框架快1倍、查詢快4倍,給小二們搭建數據報表提升了4-10倍的速度。同時,由於\"一體化\"的特性,能實現實時與離線數據的完全一致。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/wechat\/images\/a0\/a0d7cf4fdc1ffa703bb57c88c5b8111c.jpeg","alt":null,"title":null,"style":null,"href":null,"fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"除了在業務開發效率和計算性能上的進步,流批一體計算架構也讓集羣資源利用率得到大幅提升。阿里的 Flink 實時集羣經過最近幾年的高速擴展,已經達到了百萬核 CPU 的計算規模,上面運行着數萬個 Flink 實時計算任務。白天是實時數據業務的高峯期,晚上業務低峯期計算資源出現空閒,正好可以爲離線批任務提供免費的計算資源。批和流一套引擎,運行在一套資源底座上,天然的削峯填谷,自然的混布,不僅節省了開發成本,同時也大幅節省了運維成本和資源成本。今年雙 11,基於 Flink 的流批一體數據業務,沒有額外申請任何資源,批模式全部複用 Flink 實時計算集羣,集羣利用率大幅提升,爲業務方節省了大量的資源開銷,高效的資源模式也爲後續更多業務創新提供了沃土。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"“流批一體”,Flink 十年磨一劍"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"接下來讓我們從技術角度聊一下“流批一體”大數據處理技術的發展歷程。這要從開源大數據技術的鼻祖 Hadoop 開始談起,10 多年前 Hadoop 作爲第一代開源大數據技術出現,MapReduce 作爲第一代批處理技術解決了大規模數據處理問題,Hive 的出現更是讓用戶可以用 SQL 的方式進行大規模數據的計算。但隨着大數據業務場景的逐步發展,很多應用都對數據實時化產生了越來越強烈的需求,例如:社交媒體,電商交易,金融風控等行業。在這個需求背景下,Storm 作爲第一代大數據流處理技術應運而生,Storm 在架構上和 Hadoop \/ Hive 完全不同,它是完全基於消息的流式計算模型,可以在毫秒級延遲情況下併發處理海量數據,因此 Storm 彌補了 Hadoop MapReduce 和 Hive 在時效性上的不足。就這樣大數據計算在批和流兩個方向都有了各自不同的主流引擎,並呈現出涇渭分明的格局,大數據處理技術經歷完了第一個時代。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"隨後大數據處理技術來到了第二個時代, Spark 和 Flink 兩款計算引擎在新時代陸續登場。Spark 相對於 Hadoop 和 Hive,具備更加完善的批處理表達能力和更加優秀的性能,這讓 Spark 社區迅速發展,並逐步超越了 老牌的 Hadoop 和 Hive,成爲批處理技術領域的主流技術。但 Spark 並未止步於批處理技術,很快 Spark 也推出了流計算解決方案,即 Spark Streaming,並不斷進行改進完善。但大家都知道 Spark 的核心引擎是面向“批處理”概念的,不是一款純流式計算引擎,在時效性等問題上無法提供極致的流批一體體驗。但 Spark 基於一套核心引擎技術,同時實現流和批兩種計算語義的理念是非常先進的,與其具備相同流批一體理念的還有另一款新引擎 Flink。Flink 正式亮相比 Spark 稍微晚一些,但其前身是來自德國柏林工業大學 2009 年的研究項目 Stratosphere,至今也有 10 年之久。Flink 的理念和目標也是利用一套計算引擎同時支持流和批兩種計算模式,但它和 Spark 相比選擇了不同的實現路線。Flink 選擇了面向“流處理”的引擎架構,並認爲“批”其實是一種“有限流”,基於流爲核心的引擎實現流批一體更加自然,並且不會有架構瓶頸,我們可以認爲 Flink 選擇了 ”batch on streaming“ 的架構,不同於 Spark 選擇的 “streaming on batch” 架構。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/wechat\/images\/dc\/dc7794f108ba51a1b2aaeb6f53315292.jpeg","alt":null,"title":null,"style":null,"href":null,"fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Flink 實現完善的流批一體架構也不是一蹴而就的,在早期的 Flink 版本中,Flink的流和批無論在 API 還是在Runtime 上都還沒有達到徹底的統一。但從 1.9 版本開始,Flink 開始加速在流批一體上進行完善和升級,Flink SQL 作爲用戶使用的最主流 API,率先實現了流批一體語義,使得用戶只需學習使用一套 SQL 就可以進行流批一體的開發,大幅節省開發成本。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/wechat\/images\/19\/1993548e82970451c659695b435e7f0d.jpeg","alt":null,"title":null,"style":null,"href":null,"fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是 SQL 並不能解決用戶的所有需求。一些定製化程度較高,比如需要精細化的操縱狀態存儲的作業還是需要繼續使用 DataStream API。在常見的業務場景中,用戶寫了一份流計算作業後,一般還會再準備一個離線作業進行歷史數據的批量回刷。但是 DataStream 雖然能很好的解決流計算場景的各種需求,但卻缺乏對批處理的高效支持。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因此,Flink 社區在完成 SQL 流批一體升級之後,從 1.11 版本也開始投入大量精力對 DataStream 進行流批一體能力的完善,在 DataSteam API 上增加批處理的語義,同時結合流批一體 Connector 的設計,讓 DataStream API 能夠在流批融合場景下對接 Kafka 和 HDFS 等不同類型流批數據源。 接下來流批一體的迭代計算 API 也將被引入到 DataStream 中,進一步解鎖一系列機器學習的場景。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在當前 Flink 主版本中,不管是 SQL 還是 DataStream API,在流批一體概念上都還是流計算和批計算功能的一個結合體。用戶編寫的代碼,需要選擇使用流的方式跑,還是批的方式跑。但有些業務場景已經提出更高的要求,即流批混合的需求,並且自動的在批和流之間自動切換,例如:數據集成以及數據入湖場景,用戶的需求是先把數據庫的全量數據同步到 HDFS 或者雲存儲上,然後再自動實時同步 DB 中的增量數據上去,並在同步過程中進行 流批混合的 ETL 數據處理,Flink 也將在後續繼續支持更加智能的流批融合場景。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Flink “流批一體”技術在阿里巴巴的發展歷程"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"阿里巴巴是國內最早選擇 Flink 開源技術的公司,在 2015 年我所在的搜索推薦團隊希望面向未來5-10 年的發展,選擇一款新的大數據計算引擎,用來處理搜索推薦後臺海量商品和用戶數據,由於電商行業對時效性具備非常高的訴求,因此我們希望新的計算引擎既有大規模批處理能力,也具備毫秒級實時處理能力,即一款流批統一的引擎,當時 Spark 的生態已經走向成熟,並且通過 Spark Streaming 提供了流批一體的計算能力,而 Flink 當時剛剛在前一年成爲Apache頂級項目,還是一個冉冉升起的新星項目,當時團隊內部針對 Spark 和 Flink 經過了一段時間的調研和討論,一致認爲雖然 Flink當時生態並不成熟,但其基於流處理爲核心的架構對於流批一體的支持更加合適,因此非常迅速的做出決定,在阿里內部基於開源 Flink 進行完善和優化,搭建搜索推薦的實時計算平臺。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"經過團隊一年的努力,基於 Flink 的搜索推薦實時計算平臺成功的支持了2016 年的搜索雙 11,保證了搜索推薦全鏈路實時化。通過在阿里最核心業務場景的落地證明,也讓全集團都認識了 Flink 實時計算引擎,並決定將全集團實時數據業務都將遷移到 Flink 實時計算平臺上。又經過一年的努力,Flink 在 2017 年雙 11 不負衆望,非常順利的支持了全集團雙 11 的實時數據業務,包括 GMV 大屏等最核心的數據業務場景。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2018 年 Flink 開始走向雲端,阿里雲上推出了基於 Flink 的實時計算產品,旨在爲廣大中小企業提供雲計算服務。飲水思源,阿里巴巴不僅希望利用 Flink 技術解決自己業務的問題,同樣也希望能夠推動 Flink 開源社區更快的發展,爲開源技術社區做出更多貢獻,因此阿里巴巴在 2019 年初收購了 Flink 創始公司和團隊 Ververica,開始投入更多資源在 Flink 生態和社區上。到了 2020 年,國內外主流科技公司幾乎都已經選擇了 Flink 作爲其實時計算解決方案,我們看到 Flink 已經成爲大數據業界實時計算的事實標準。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/wechat\/images\/24\/24eb9788cd0332f3e43dbfaba4239cb2.jpeg","alt":null,"title":null,"style":null,"href":null,"fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"接下來,Flink 社區不會停止技術創新,在阿里巴巴業務場景中流批一體技術已經從理論走向落地。2020 年的雙 11,Flink 流批一體技術在天貓營銷決策核心系統中給出了精彩的表現,加上之前已經在搜索推薦中成功運行的流批一體索引構建以及機器學習流程,充分驗證了5 年前我們大膽選擇 Flink 技術體系的正確性,相信未來我們將會在更多公司看到 Flink 流批一體技術的落地。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"“流批一體”技術創新,推動 Flink 開源社區蓬勃發展"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Flink 堅持流批一體技術創新之路,也自然推動 Flink 開源社區的高速發展和生態的加速繁榮。我們欣喜的看到,隨着 Flink 在國內更多公司的加速落地,來自中文社區力量日益龐大,已經開始逐漸超越國外成爲主流。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先最明顯的是用戶數量的增多,從今年 6 月份起,Flink 中文郵件列表的活躍度開始超越英文郵件列表。隨着大量的用戶湧入 Flink 社區,也帶來了更多的優秀代碼貢獻者,有效的促進了 Flink 引擎的開發迭代。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"自 1.8.0 版本以來,Flink 每個版本的 Contributor 數量都在提升,其中大多數都是來自國內的各大企業。毫無疑問,來自國內的開發者和用戶羣體,已經逐漸成爲推動 Flink 向前發展的中堅力量。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/wechat\/images\/4e\/4e4d02f3e92ff0899d7ce533b50c6280.jpeg","alt":null,"title":null,"style":null,"href":null,"fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"中文社區的不斷壯大,使得 Flink 整體的活躍度和 2019 年相比有增無減。在 Apache 軟件基金會 2020 財年的報告中,Flink 蟬聯了年度最活躍項目(通過 user+dev 郵件列表活躍度)。與此同時,在代碼 Commit 次數和 Github 主頁流量這兩項指標上,Flink 均排名第二。能在 Apache 軟件基金會接近 350個 頂級項目中取得如此成績,着實不易。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Flink Forward Asia 2020,“流批一體”技術揭祕"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Flink Forward 是由 Apache 官方授權的 Flink 技術大會, 今年 Flink Forward Asia (簡稱:FFA) 大會全程採用在線直播的方式,免費爲廣大開發者提供一場開源大數據技術盛宴,足不出戶可以在線觀看來自 阿里巴巴、螞蟻科技、騰訊、字節跳動、美團、小米、快手、B 站、網易、微博、Intel、DellEMC、Linkedin 等國內外一線互聯網公司針對 Flink 的技術實踐分享和技術創新。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"流批一體也將是本屆 FFA 大會的熱門話題,來自天貓數據技術負責人將會給大家分享 Flink 流批一體技術在阿里的實踐和落地,讓大家看到流批一體技術是如何在雙 11 最核心的場景中發揮業務價值;來自阿里巴巴、字節跳動的 Flink PMC 和 Committer 技術專家將圍繞 Flink 流批一體 SQL 和 Runtime 進行深度技術解讀,爲大家帶來 Flink 社區的最新技術進展;來自騰訊的遊戲技術專家將爲大家帶來 Flink 在國民遊戲王者榮耀中的應用實踐;來自美團的實時大數據負責人將爲大家介紹 Flink 如何助力生活服務場景實時化;來自快手大數據負責人將爲大家帶來 Flink 在快手的前世今生髮展歷程;來自微博的機器學習技術專家將爲大家帶來如何利用 Flink 進行信息推薦。此外,Flink 相關的議題還涵蓋了金融、銀行、物流、汽車製造、出行等各行各業,呈現出百花齊放的繁榮生態景象。歡迎對開源大數據技術有熱情的開發者能參加本屆 "},{"type":"link","attrs":{"href":"http:\/\/flink-forward.org.cn","title":"xxx","type":null},"content":[{"type":"text","text":"Flink Forward Asia 技術大會"}]},{"type":"text","text":",瞭解更多 Flink 社區最新技術發展和創新。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"戳"},{"type":"link","attrs":{"href":"http:\/\/flink-forward.org.cn","title":"xxx","type":null},"content":[{"type":"text","text":"這裏"}]},{"type":"text","text":",去Flink Forward Asia 2020。"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章