當前位置:首頁 » 股票交易 » scala股票交易可視化

scala股票交易可視化

發布時間: 2022-04-13 07:30:03

❶ C++還是Java 哪個響應高頻交易應用比較快

概述高頻交易的最佳解決方案是什麼?對於這個問題,觀點一直比較沖突,部分原因是人們不知道什麼叫高頻交易並且與人們想像的總是存在差異,其次是速度問題,用哪種語言開發速度會快點,本文作者拿當今非常流行的C++和Java這兩種語言進行比較。如果你是一個典型的Java和C++程序員,並且用這兩種語言編寫過典型的面向對象程序。在相同的時間下面編寫高頻解決方案,Java程序員有可能會提前完成程序並且有時間調整應用程序。在這種情形下,恕我直言,Java應用程序的速度會快些。以我的經驗,Java在執行上會好於C++,因為Java進行微基準測試,其實它沒有做什麼事情。但是如果沒有時間限制,對Java和C++程序進行調優,那麼C++程序會比Java快些。然而,考慮到資源的有限性和環境的不斷變化,一個充滿活力的語言可能會現實應用中超常發揮。在股票交易這種高頻市場,即使延遲10微秒都需要認真對待。 Java甚至標準的OOP C++,用在商業硬體上都不是最佳選擇,你需要藉助C或者精簡版的C++和一些專業的硬體工具,例如FPGAs、GPUs。然而,在外匯(FX:Foreign Exchange)市場,高頻意味著延遲時間不低於100微秒。在這個的環境下,C++或者Java(低GC)都是個不錯的選擇。個人認為,在不斷變化的交易場所,Java擁有更多的靈活性。當人們討論高頻率時,尤其是在做銀行系統的時候,他們想把時間縮短1毫秒或者單單幾毫秒。在這樣的情況下,我會說,靈活/多態的Java、Scala或者C#等語言在編程時間上將會更加充裕,可維護性或可靠性優勢將會超過C/C++或FPGA。Java所面臨的問題問題不在於這樣的語言上,而是缺乏緩存控制和上下文交互。如果你復制一塊在本地已經操作過的內存,但是在運行之間使用不同的延遲,副本將會變慢。原因是部分緩存被交換出去,而復制本身也需要一些時間。這和訪問內存的任何操作是一樣的。例如,訪問計劃對象將會更慢。private void doTest(Pauser delay) throws InterruptedException { int[] times = new int[1000 * 1000]; byte[] bytes = new byte[32* 1024]; byte[] bytes2 = new byte[32 * 1024]; long end = System.nanoTime() + (long) 5e9; int i; for (i = 0; i < times.length; i++) { long start = System.nanoTime(); System.array(bytes, 0, bytes2, 0, bytes.length); long time = System.nanoTime() - start; times[i] = (int) time; delay.pause(); if (start > end) break; } Arrays.sort(times, 0, i); System.out.printf(delay + ": Copy memory latency 1/50/99%%tile %.1f/%.1f/%.1f us%n", times[i / 100] / 1e3, times[i / 2] / 1e3, times[i - i / 100 - 1] / 1e3 ); } 這個測試其實是在多次執行同一件任務,在執行之間使用不同的延時。其中大部分時間都花在本地方法上,在測試期間沒有創建或拋棄對象。YIELD: Copy memory latency 1/50/99%tile 1.6/1.6/2.3 us NO_WAIT: Copy memory latency 1/50/99%tile 1.6/1.6/1.6 us BUSY_WAIT_10: Copy memory latency 1/50/99%tile 2.8/3.5/4.4 us BUSY_WAIT_3: Copy memory latency 1/50/99%tile 2.7/3.0/4.0 us BUSY_WAIT_1: Copy memory latency 1/50/99%tile 1.6/1.6/2.5 us SLEEP_10: Copy memory latency 1/50/99%tile 2.2/3.4/5.1 us SLEEP_3: Copy memory latency 1/50/99%tile 2.2/3.4/4.4 us SLEEP_1: Copy memory latency 1/50/99%tile 1.8/3.4/4.2 us -XX+Java 7的UseLargePagesYIELD: Copy memory latency 1/50/99%tile 1.6/1.6/2.7 us NO_WAIT: Copy memory latency 1/50/99%tile 1.6/1.6/1.8 us BUSY_WAIT_10: Copy memory latency 1/50/99%tile 2.7/3.6/6.6 us BUSY_WAIT_3: Copy memory latency 1/50/99%tile 2.7/2.8/5.0 us BUSY_WAIT_1: Copy memory latency 1/50/99%tile 1.7/1.8/2.6 us SLEEP_10: Copy memory latency 1/50/99%tile 2.4/4.0/5.2 us SLEEP_3: Copy memory latency 1/50/99%tile 2.3/3.9/4.8 us SLEEP_1: Copy memory latency 1/50/99%tile 2.1/3.3/3.7 us 上面是最好的三種運行。進行內存拷貝的典型時間(中間值)是1.6到4.6微秒,依據是否有線程在繁忙等待或休眠狀態上使用了1到10毫秒。這大概是3倍的比率,並且與Java無關,這是因為它沒有真正的控制權。即使在最好的情況下時間差大概也是2倍。代碼ThreadlatencyTest.java總結在極端高頻情況下,核心引擎一般會用C、匯編和定製的硬體實現比使用C++或JAVA面向對象實現的方式多。由於延遲需求不再那麼緊張(指當基礎平台使用C/C++搭建架構之後,應用平台層面,時間響應已不是很重要,反而開發響應更重要)。因此Java和其他動態語言可能會變得更富有成效,在這種情形下,選擇Java或許可以幫你輕松應對不斷變化的市場/需求。

❷ 供需鏈的Scala的供需鏈

荷蘭Scala以開發高水平的跨國商務軟體而聞名於世。Scala集成的電子商務管理解決方案,具有財務及資源管理、市場營銷管理、供應流程管理、服務及項目流程管理、製造及商務智能管理等方面。Scala的供需鏈是在當前具有先進管理思想的ERP的基礎上又吸收了供需鏈管理的敏捷製造技術,適用於面向客戶的管理模式和企業動態聯盟企業。
一般企業流程主要是在以下三個部門之間進行的: 主生產計劃
主生產計劃(MasterProctionSchele)模塊可根據銷售預測和銷售定單對產成品制定一個長期的生產計劃,同時企業也可根據自己的實際情況進行手工調整從而基本上滿足企業的長期需求。在這里不會對原材料進行具體的需求分析。實際上,MPS是為管理部門提供一種手段,以授權和控制勞動力水平、庫存投資、關鍵資源負荷(草擬生產能力計劃)和支持客戶服務的現金流量、獲利能力及投資目標。同時,MPS程序還可以驅動物料需求計劃,使業務計劃與日常操作計劃互連。除預測信息外,輸入MPS的還有庫存狀態、客戶訂單和安全庫存水平。
有了主生產計劃,就可以運行物料需求計劃(MaterialRequirementsPlanning),它是建立在MRPII理論基礎上的。根據主生產計劃、庫存情況及物料清單,MPR就能把主生產計劃轉換為生產和采購建議,其中包括前置期、批量大小、車間日程表、計劃工程變更和庫存狀態等。系統不僅給出一個完整的有關整個生產過程的MRP報表,同時對生產車間、工序等做生產能力需求分析(CapacityRequirementsPlanning),它是把MRP程序產生的計劃工作量和生產管理模塊中發放的加工單加以結合處理,將結果以圖形的形式表現出來,企業可通過改變利用率或增加另一班次,模擬每個加工中心改變生產能力後的狀況。
張先生所做的就是由銷售訂單模塊的報價單功能向他的客戶針對自行車生產提供一個詳細的報價,只有等客戶認為價錢合理,可以成交,並將信息反饋給張先生後,張先生只需在計算機上點擊幾下,報價單便自動轉換為訂單,同時張先生不用自己跑到庫房查詢存貨情況,計算機會告訴他是否有足夠的存貨,是否還需組織生產。如果客戶催貨比較緊,張先生可通過批次管理制定該貨出廠可以是第幾批,然後系統會提交一份交貨時間表。
不過由於自行車生意的確不錯,庫存明顯不夠,需要組織生產。這時MPS根據本廠的實際情況會向張先生提供一個長期的生產計劃。而MRP則將這個計劃轉換為具體的生產和采購建議。尤其它能將物料清單分解、細化,比如生產一輛自行車需要軸承、螺絲、螺母、鐵絲等等,而這些原材料庫存不足,需要采購,至於采購多少,生產多少,MRP會在建議中給出。
生產作業
在ERP的生產流程中,一旦確立了生產計劃,並正確定義了人員、機器和工具等生產資源,Scala的訂單計劃/生產作業控制(OrderPlanning/Proctionactivitycontrol)模塊就能幫助企業計劃、跟蹤並分析加工單。當加工單發出後,構成該產品的物料將被扣留,並自動降低相關工作中心的有效工作能力。 在創建加工單(creatingaworkorder)後,加工單可以包含很多信息,如倉庫、優先順序、主管、客戶和客戶訂單號、交貨地址、附註以及會計核算明細表等。做完前置期計算(Lead),輸入有關物料和操作程序的全部數據後,就可以發放加工單(Releasingaworkorder),發出的加工單將為訂單預留出必要物料。除加工單的起始日期外,也可以有選擇地將所需的物料預留到其它日期。這個過程就是物料預留(Reservationofmarerials)。
每一種物料/產品都有一份MRP記錄(MRPrecord),表明其在庫存余額中的預期走勢。此記錄除了表明實際庫存余額外,還能顯示出該物料/產品有關的預期事項,如客戶的預定、加工單或預期從生產部門收到的產品等。
有了加工單,從庫存領取物料以後,便進入了車間控制(ShopFloorControl)。生產設備的瓶頸矛盾一直是制約產量的重要因素。車間控制模塊提供有關工具,使資源、原材料和各種組件的物流達到平衡,從而實現對加工單的有效執行。其主要功能包括:給每個加工單制定優先順序、排程、列印加工單文件、提供在產品信息、為加工單計劃更新加工單狀態等。車間人員只要通過查看計算機屏幕,就可知道有關生產變化和特殊操作指令。
這其中車間管理模塊可以支持多個場地採用無紙生產(Paperlessproction)的要求,企業可以為每個生產中心或操作者編制屏幕格式,操作者可以檢查與每種加工單相關的全部數據,並對主要信息進行監控。而生產統計(Proctionstatistics)模塊可以提供有關生產過程狀況的重要信息,是監控生產過程的一種工具。操作者可以通過這一功能查看生產能力、利用率、前置期、廢品等數據,以及上述數據的生成原因等。
有了這套軟體,生產變得更加按部就班,並且效率高。自行車生產第一線的主管要做的就是在接到張先生的生產建議後將其轉為生產加工單,然後根據加工單向倉庫領料,不會產生不必要的浪費或材料短缺。由車間控制監控生產的每一個環節。由於全部通過計算機,所以也實現了無紙生產。等客戶所需的自行車生產完畢後,入庫,根據交貨時間及時交貨,張先生就可以和客戶滿意地握手了。 采購
在Scala的采購模塊(PurchaseOrdersMole)中,具備采購建設功能,企業根據自身情況加以調整,並根據供貨商交貨期、預算銷售額、實際銷售額、合理訂購數量等,系統自動生成一個詳細的采購計劃(Purchaseplanning),並能對訂單產生出默認的供貨商。
確定了采購計劃後,企業就可以通過采購訂單建議程序來自動生成采購訂單(PurchaseOrdes),當然企業自己也可以手工輸入訂單。訂單一旦生成,就被編入企業庫存計劃,並計入采購約定成本。訂單列印出來後寄給供應商,供應商就可以發貨了。接受貨物(receivinggoods)僅以實際交貨數量或以發票給出的數量為准。在這兩種情況下,采購成本功能都會把庫存價值和會計核算內容更新。接受到的貨物可被分配到不同的倉庫。企業可以通過批次管理(BatchControl)功能規定批號、供貨商標記和有效期,以便日後識別。各批次直到通過了質量管理檢驗才能發出。當然,在采購訂單及總分類帳模塊中還會存在未交貨的訂購貨物,稱之為途中貨物(Goodsintransit),對采購訂單條目進行簡單的查詢,可以使企業對收貨和發貨有一個全面了解。
因為Scala軟體很好地把采購管理模塊與應付分類帳模塊良好地結合在一起,因此可以把所有與采購訂單相對應的所有發票(Invoices)輸入到這個模塊中,這樣企業就確保了采購成本的計算無誤,使管理和授權程序更加簡單。輸完發票後,系統會生成應付帳款憑證。根據這條供需鏈,該憑證就會進入財務應付分類帳模塊。
有了這套軟體,采購部主管就可根據張先生提供的采購建議,做適當調整,生成采購訂單以組織采購自行車生產所必須的原材料,並入庫做好記錄。這一切都按照計劃進行,所以不存在突然加班的問題。當然采購的發票可以自動生成,也可以人工輸入,這些都會轉入財務中去,節省了大量的時間。
銷售訂單和計劃 由Scala供需鏈流程來看,根據市場需求(Marketdemand),企業向客戶提交一個報價單,經過雙方協商,最終形成一個銷售訂單反饋到企業。Scala的銷售訂單模塊(SalesOrdermole)廣泛的功能可對銷售和分銷過程的各個階段提供支持,由於銷售訂單模塊與庫存、采購和生產模塊緊密結合,企業能夠在銷售的同時,制定生產或采購明細表,從而保證及時交貨。
企業可以通過該模塊的報價單(Quotations)為客戶提供報價,當客戶接受報價時,企業自動把報價單轉換為訂單,同時報價報表可以提供一份有效的及過期的報價單總匯。在訂單(Orders)功能中,由報價單轉換過來的不同類型的訂單和人工輸入的訂單,決定了後勤物資的流量。企業可以同時指定交貨時間,如果不能在最後期限交貨,交貨計劃系統會發出警告。通過批次管理(BatchControl),企業可以在訂單輸入時指定特定的批次。考慮庫存的整體情況,根據先進先出的原則,系統可以提出一份交貨時間表。於是,根據交貨建議,Scala的銷售定單模塊(Salesordermole)將提供所有必要的文件——訂單確認書、取料清單、交貨票據和發票等。在裝運確認之後,定單就成為開票的依據。所售貨物的成本和收入將自動記入Scala的定貨分類帳模塊(OrderLedgerMole)。
庫存管理
產成品生產出來就要面臨入庫。從采購到交貨,後勤流程全方位管理需要有良好的管理工具。Scala的庫存管理(StockControl)模塊可以單獨使用,但當與采購訂單和銷售訂單模塊結合使用時,其功能會更強。庫存管理模塊的主要優點之一是能提供與每一庫存項目相關的廣泛數據。再訂購水平、安全庫存以及缺貨報表功能有助於有效地管理庫存和減少資金投入。用戶可以通過庫存管理模塊管理貨物系列號和物料清單,也能靈活進行批次管理,全面情況跟蹤,並能支持廣泛的服表程序。
在庫存項目管理主模塊(Stockitemmaster)中可以對每一庫存項目輸入大量數據。每一庫存項目都有自己的單位換算表。Scala按庫存項給用戶提供幾十種價目表、特殊回扣以及定價有效期等。功能廣泛的價格及成本計算程序使得對價格及成本的更改更加容易。通過產品的系列號(Serialnumber)和物料清單(BillofMaterial),用戶可以靈活進行批次管理。同時,Scala還能進行庫存評估(StockValuation),並在用戶營業時也能進行全部庫存檔點(Stocktaking)工作。 應付分類帳
Scala應付分類帳(PurchaseLedger)模塊為企業獲得供應商信息和付款流程提供全面支持。它能協調采購和授權程序,為用戶選擇付款方式提供充分的靈活性,簡化各種增值稅和銷售稅率的會計核算過程,使法定申報程序變得更為簡單。
在供應商文件(Thesuppliermasterfile)中包含了用戶所選定的供應商的一般信息。由於該模塊會與Scala應收分類帳模塊相互發生聯系,因此可以顯示用戶應向供應商支付的凈差額。在對細節管理不失控的情況下,集中采購功能()能十分方便地進行集中采購。在發票管理(Invoiceprocessing)時,在報表中尚無發票的地方只有得到授權以後,發票才能登入會計核算明細帳。同時多樣化的供應商借貸對照表和匯總表可以顯示出各種未付的債務狀況,並幫助處理預扣賦稅。根據每張發票的到期信息,自動付款(Automaticpayments)將按照用戶的選擇提出付款建議。根據登帳日期或付款日期,系統計算出精確的稅額,並定期列印出所需的增值稅/銷售稅表。另外,為了幫助用戶對企業財務狀況進行評估,該模塊還會提供付款預測(Paymentforecasting)。
應收分類帳
為改進企業現金流量,首先要建立一個有效的應收分類帳。Scala應收分類帳(SalesLeger)模塊強大功能不僅能對收款程序起較好的作用,而且還能給銷售業務和市場開發打下良好的基礎。
客戶主文件(Thecustomermasterfile)包含企業客戶群的一般信息,可幫助用戶分析規劃市場。在記錄發票(Invoicing)時,Scala其它模塊中的發票可自動傳送到應收分類帳上,也可直接人工入帳。當用戶列印發票日記帳時,總分類帳的各科目都將及時更新。同時利用發票合並功能可以實現幾張發票的合並。作為應收分類帳中最重要的報表,余額匯總報表(BalanceSummaryReport)中列有於用戶相關的全部來往項目。考慮到客戶的付款習慣,該系統可為用戶提供付款(Payment)預測功能。例外呈報(Exceptionreporting)功能可極大地幫助用戶根據自己的要求處理日常付款托收業務。根據某一時期的業務交易額,Scala可及時編制所有必要的增值稅表及其它報表,並本地化輸出。

總分類帳
會計核算是每個公司業務的核心。在Scala業務軟體中,總分類帳(GeneralLedger)的實用性和靈活性恰恰表明了其它Scala業務模塊的多樣性。全部模塊均具有10構面會計結構,可用於法定的,以及分析性的會計核算。用戶可以任意使用一種構面呈報或查詢實際或預算數目。把這些用途與Scala內置的多貨幣、多語種能力相結合,就會發現Scala是當今全球和本地會計核算和業務管理軟體中功能最強大的系統之一。
尤其值得一提的是,Scala的科目明細帳(AccountScheleSystem)非常靈活,可充分滿足不同地區的需要。帳戶余額按科目類別儲存,使用戶能夠在任何給定期間迅速呈報。憑證按日期儲存,財政年度可以覆蓋多達18個周期。在連續進行下一個周期之前。不必結帳。用戶可以呈報從憑證文件中選定的任何憑證。帳戶類型中還包含統計帳戶,它可以保存法定會計核算中未包括的數據。
Scala財務系統使用10種會計構面(),可以為用戶的每一家分公司定義法定會計核算體系,並定義不同的呈報層次。當用戶需要在幾個科目、成本中心或其它會計核算構面之間分攤費用時,Scala的自動分攤(Automaticallocation)提供了99種可能性。當輸入一份憑證時,系統將自動執行分攤。當然,任何憑證也可在定期分攤(Periodization)功能下實現待攤費用按若干個周期的分攤,而且可以在下一個財政年度,延續分攤。在進行對帳(Reconciliation)時,系統提供一個手邊現金帳簿以核對憑證。通過輸入銀行憑證文件,用戶可以進行人工或自動核對。如果用戶在選項中選擇固定資產管理(FixedAssetManagement),就可以對用戶的固定資產進行全面管理。其中Scala提供了兩種方法來針對一種固定資產進行折舊或重新估價計算。
在生產流程中,當產成品入庫後可過度到財務模塊。系統可以自動計算出產成品成本(Costing),一般以標准成本來控制產成本。同時計算出實際成本(ActuallyCost),並通過統計模塊對標准成本和實際成本的差異進行分析。它針對每個加工單(必須是關閉加工單為准),分析出物料的差異、人工的差異,得出人工的成本、料的成本及其它製造費用的成本。由於企業可以通過銷售定單知道產品價格,因此知道了成本後,企業就可以知道利潤。在差異分析完成後,進行差異分攤(VarianceAllocate),最後就可以匯入總帳。 另外,在總分類帳系統中,Scala還提供了紅沖憑證、沖轉憑證等,而報表模塊(ReportofGeneralLedger)具有的各種財務報表(BalanceSheet,ProfitStatment)功能在財務系統中也極為重要,報表中列有與此有關的全部項目,通過對十個會計構面及其它特定標準的選擇,可迅速提取相關信息,讓用戶從繁瑣的報表作業中解脫出來。
以上應付分類帳(PurchaseLedger)、應收分類帳(SalesLeger)、總分類帳(GeneralLedger)可簡稱PL、SL、GL,它們有著十分密切的聯系。PL能協調采購和授權程序,為獲得供應商信息和選擇付款方式提供了充分的靈活性。而SL提供了實現財務和業務目標的有力工具,可全面記錄貨幣明細和帳面價值,同時有助於分析和規劃市場。最後,PL和SL都將在功能強大的GL中得以匯總和體現。

❸ 什麼是大數據技術大數據的概念

大數據技術是指大數據的應用技術,涵蓋各類大數據平台、大數據指數體系等大數據應用技術。

大數據是指無法在一定時間范圍內用常規軟體工具進行捕捉、管理和處理的數據集合。是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的信息資產。

隨著雲時代的來臨,大數據也吸引了越來越多的關注。分析師團隊認為,大數據通常用來形容一個公司創造的大量非結構化數據和半結構化數據,這些數據在下載到關系型資料庫用於分析時會花費過多時間和金錢。

大數據分析常和雲計算聯繫到一起,因為實時的大型數據集分析需要像MapRece一樣的框架來向數十、數百或甚至數千的電腦分配工作。

(3)scala股票交易可視化擴展閱讀:

大數據的三個層面:

1、理論,理論是認知的必經途徑,也是被廣泛認同和傳播的基線。在這里從大數據的特徵定義理解行業對大數據的整體描繪和定性;從對大數據價值的探討來深入解析大數據的珍貴所在;洞悉大數據的發展趨勢;從大數據隱私這個特別而重要的視角審視人和數據之間的長久博弈。

2、技術,技術是大數據價值體現的手段和前進的基石。在這里分別從雲計算、分布式處理技術、存儲技術和感知技術的發展來說明大數據從採集、處理、存儲到形成結果的整個過程。

3、實踐,實踐是大數據的最終價值體現。在這里分別從互聯網的大數據,政府的大數據,企業的大數據和個人的大數據四個方面來描繪大數據已經展現的美好景象及即將實現的藍圖。

參考資料來源:網路-大數據

❹ 如何通過雪球查詢股票之前的變動狀況

一. 雪球公司介紹

雪球 聰明的投資者都在這里。

web 1.0:新聞資訊,股價信息,K線圖
web 2.0:SNS 訂閱,分享,聊天
web 3.0:移動 APP,交易閉環
雪球現在員工數還不到100,其中技術人員佔一半。去年9月C輪融資4kw刀。我們現在的技術棧由下列組件組成:Java,Scala,Akka,Finagle,Nodejs,Docker ,Hadoop。我們當前是租用IDC機房自建私有雲,正在往「公私混合雲」方向發展。

在雪球上,用戶可以獲取滬深港美2w+股票的新聞信息,股價變化情況,也可以獲取債券,期貨,基金,比特幣,信託,理財,私募等等理財產品的各類信息,也可以關注雪球用戶建立的百萬組合,訂閱它們的實時調倉信息,還可以關注雪球大V。雪球當前有百萬日活躍用戶,每天有4億的API調用。App Store 財務免費榜第 18 名。歷史上曾排到財務第二,總免費榜第 19。

二. 雪球當前總體架構

作為一個典型的移動互聯網創業公司,雪球的總體架構也是非常典型的設計:

最上層是三個端:web端,android端和iOS端。流量比例大約為 2:4:4 。web3.0 的交易功能,在 web 端並不提供。
接入層以及下面的幾個層,都在我們的自建機房內部。雪球當前只部署了一個機房,還屬於單機房時代。正在進行「私有雲+公有雲混合部署」方案推進過程中。
我們當前使用 nodejs 作為 web 端模板引擎。nodejs 模塊與android 和 ios 的 app 模塊一起屬於大前端團隊負責。
再往下是位於 nginx 後面的 api 模塊。跟 linkedin 的 leo 和微博的 v4 一樣,雪球也有一個遺留的大一統系統,名字就叫 snowball 。最初,所有的邏輯都在 snowball 中實現的。後來慢慢的拆出去了很多 rpc 服務,再後來慢慢的拆出去了一些 http api 做成了獨立業務,但即便如此,snowball 仍然是雪球系統中最大的一個部署單元。
在需要性能的地方,我們使用 netty 搭建了一些獨立的介面,比如 quoto server,是用來提供開盤期間每秒一次的股價查詢服務,單機 qps 5w+,這個一會再細說;而 IM 服務,起初設計里是用來提供聊天服務,而現在,它最大的用途是提供一個可靠的 push 通道,提供 5w/s 的消息下發容量,這個也一會再細說。
雪球的服務化拆分及治理採用 twitter 開源的 finagle rpc 框架,並在上面進行了一些二次開發和定製。定製的功能主要集中在 access log 增強,和 fail fast,fail over 策略及降級開關等。 finagle 的實現比較復雜,debug 和二次開發的門檻較高,團隊內部對此也進行了一些討論。
雪球的業務比較復雜,在服務層中,大致可以分為幾類:第一類是web1.0,2.0 及基礎服務,我們稱為社區,包括用戶,帖子,新聞,股價,搜索等等,類比對象就是新浪財經門戶+微博;第二類是組合及推薦,主要提供股票投資策略的展示和建議,類比對象是美國的motif;第三類是通道,類似股市中的「支付寶」,接入多家券商,提供瞬間開戶,一鍵下單等等各種方便操作的功能。
雪球的業務實現中,包含很多非同步計算邏輯,比如搜索建索引,比如股票漲跌停發通知,比如組合收益計算等等,為此,我們設計了一個獨立的 Thread/Task 模塊,方便管理所有的後台計算任務。但隨著這些 task 越來越多,邏輯差異越來越大,一個統一的模塊並不是總是最佳的方案,所以,我們又把它拆成了兩大類:流式的,和批量式的。
雪球的推薦體系包括組合推薦「買什麼」和個性化推薦。我們最近正在重新梳理我們的大數據體系,這個感興趣的話可以單聊。
最下面是基礎設施層。雪球基礎設施層包括:redis,mysql,mq,zk,hdfs,以及容器 docker。
線上服務之外,我們的開發及後台設施也很典型:gitlab開發,jenkins打包,zabbix 監控系統向 openfalcon 遷移,redimine向confluence遷移,jira,以及內部開發的 skiing 後台管理系統。
** 三. 雪球架構優化歷程**

首先描述一下標題中的「股市動盪」定語修飾詞吧:

上證指數從年初的3000點半年時間漲到了5000多,6月12號達到最高點5200點,然後就急轉直下,最大單日跌幅 8.48%,一路跌回4000點以下。最近一周都在3900多徘徊。

3月最後一周,A股開戶 166萬戶,超過歷史最高紀錄 2007年5月第二周165萬戶。

4月份,證監會宣布A股支持單用戶開設多賬戶。

6月底,證金公司代表國家隊入場救市。

7月份,證監會宣布嚴打場外配資。

中國好聲音廣告第一晚,帶來超過平時峰值200倍的注冊量

挑戰:小 VS 大:

小:小公司的體量,團隊小,機器規模小
大:堪比大公司的業務線數量,業務復雜度,瞬間峰值沖擊

雪球的業務線 = 1個新浪財經 + 1 個微博 + 1 個 motif + 1 個大智慧/同花順。由於基數小,API調用瞬間峰值大約為平時峰值的 30+ 倍。

挑戰:快速增長,移動互聯網 + 金融,風口,A股大盤劇烈波動。

首先,在app端,在我們核心業務從 web2.0 sns 向 3.0 移動交易閉環進化的過程中,我們開發了一個自己的 hybrid 框架:本地原生框架,加離線 h5 頁面,以此來支撐我們的快速業務迭代。當前,雪球前端可以做到 2 周一個版本,且同時並行推進 3 個版本:一個在 app store 等待審核上線,一個在內測或公測,一個在開發。我們的前端架構師孟祥宇在今年的 wot 上有一個關於這方面的詳細分享,有興趣的可以稍後再深入了解。

雪球App實踐—構建靈活、可靠的Hybrid框架 http://wot.51cto.com/2015mobile/ http://down.51cto.com/data/2080769

另外,為了保障服務的可用性,我們做了一系列的「端到端服務質量監控」。感興趣的可以搜索我今年4月份在環信SM meetup上做的分享《移動時代端到端的穩定性保障》。其中在 app 端,我們採用了一種代價最小的數據傳輸方案:對用戶的網路流量,電池等額外消耗幾乎為0

每個請求里帶上前一個請求的結果

succ or fail : 1 char
失敗原因:0 - 1 char
請求介面編號: 1 char
請求耗時:2 - 3 char
其它:網路制式,etc
炒股的人大多都會盯盤:即在開盤期間,開著一個web頁面或者app,實時的看股價的上下跳動。說到「實時」,美股港股當前都是流式的數據推送,但國內的A股,基本上都是每隔一段時間給出一份系統中所有股票現價的一個快照。這個時間間隔,理論上是3秒,實際上一般都在5秒左右。 交了錢簽了合同,雪球作為合作方就可以從交易所下屬的數據公司那裡拿到數據了,然後提供給自己的用戶使用。

剛才介紹總體架構圖的時候有提到 quote server ,說到這是需要性能的地方。

業務場景是這樣的,雪球上個人主頁,開盤期間,每秒輪詢一次當前用戶關注的股票價格變動情況。在內部,所有的組合收益計算,每隔一段時間需要獲取一下當前所有股票的實時價格。起初同時在線用戶不多,這個介面就是一個部署在 snowball 中的普通介面,股價信息被實時寫入 redis ,讀取的時候就從 redis 中讀。後來,A股大漲,snowball 抗不住了。於是我們就做了一個典型的優化:獨立 server + 本地內存存儲。開盤期間每次數據更新後,數據接收組件主動去更新 quote server 內存中的數據。 後續進一步優化方案是將這個介面以及相關的處理邏輯都遷移到公有雲上去。

對於那些不盯盤的人,最實用的功能就是股價提醒了。在雪球上,你除了可以關注用戶,還可以關注股票。如果你關注的某隻股票漲了或跌了,我們都可以非常及時的通知你。雪球上熱門股票擁有超過 50w 粉絲(招商銀行,蘇寧雲商)粉絲可以設置:當這支股票漲幅或跌幅超過 x%(默認7%)時提醒我。曾經連續3天,每天超過1000股跌停,證監會開了一個會,於是接下來2天超過1000股漲停

原來做法:

股票漲(跌)x%,掃一遍粉絲列表,過濾出所有符合條件的粉絲,推送消息
新做法:

預先建立索引,開盤期間載入內存
1%:uid1,uid2
2%:uid3,uid4,uid5
3%:uid6
問題:有時候嫌太及時了:頻繁跌停,打開跌停,再跌停,再打開。。。的時候
內部線上記錄:

4台機器。
單條消息延時 99% 小於 30秒。
下一步優化目標:99% 小於 10 秒
IM 系統最初的設計目標是為雪球上的用戶提供一個聊天的功能:

送達率第一
雪球IM:Netty + 自定義網路協議
Akka : 每個在線client一個actor
推模式:client 在線情況下使用推模式
多端同步:單賬號多端可登錄,並保持各種狀態同步
移動互聯網時代,除了微信qq以外的所有IM,都轉型成了推送通道,核心指標變成了瞬間峰值性能。原有架構很多地方都不太合適了。

優化:

分配更多資源:推送賬號actor池
精簡業務邏輯:重復消息只存id,實時提醒內容不推歷史設備,不更新非活躍設備的session列表等等
本地緩存:拉黑等無法精簡的業務邏輯遷移到本地緩存
優化代碼:非同步加密存儲,去除不合理的 akka 使用
akka這個解釋一下:akka 有一個自己的 log adapter,內部使用一個 actor 來處理所有的 log event stream 。當瞬間峰值到來的時候,這個 event stream 一下子就堵了上百萬條 log ,導致 gc 顛簸非常嚴重。最後的解決辦法是,繞過 akka 的 log adapter,直接使用 logback 的 appender

線上記錄:5w/s (主動限速)的推送持續 3 分鍾,p99 性能指標無明顯變化

7月10號我們在中國好聲音上做了3期廣告。在廣告播出之前,我們針對廣告可能帶來的對系統的沖擊進行了壓力測試,主要是新用戶注冊模塊,當時預估廣告播出期間2小時新注冊100萬

壓測發現 DB 成為瓶頸:

昵稱檢測 cache miss > 40%
昵稱禁用詞 where like 模糊查詢
手機號是否注冊 cache miss > 80%
注冊新用戶:5 insert
優化:

redis store:昵稱,手機號
本地存儲:昵稱禁用詞
業務流程優化:DB insert 操作同步改非同步
下一步優化計劃:

將 sns 系統中所有的上行操作都改成類似的非同步模式
介面調用時中只更新緩存,而且主動設置5分鍾過期,然後寫一個消息到 mq 隊列,隊列處理程序拿到消息再做其它耗時操作。
為了支持失敗重試,需要將主要的資源操作步驟都做成冪等。
前置模塊HA:

合作方合規要求:業務單元部署到合作方內網,用戶的敏感數據不允許離開進程內存
業務本身要求:業務單元本身為有狀態服務,業務單元高可用
解決方案:

使用 Hazelcast In-Memory Data Grid 的 replication map 在多個 jvm 實例之間做數據同步。

java 啟動參數加上 -XX:+DisableAttachMechanism -XX:-UsePerfData,禁止 jstack,jmap 等等 jdk 工具連接

關於前置模塊,其實還有很多很奇葩的故事,鑒於時間關系,這里就不展開講了。以後有機會可以當笑話給大家講。

組合凈值計算性能優化:

一支股票可能在超過20萬個組合里(南車北車中車,暴風科技)
離線計算,存儲計算後的結果
股價3秒變一次,涉及到這支股票的所有組合理論上也需要每 3 秒重新計算一次
大家可能會問,為什麼不用戶請求時,實時計算呢?這是因為「組合凈值」中還包括分紅送配,分股,送股,拆股,合股,現金,紅利等等,業務太過復雜,開發初期經常需要調整計算邏輯,所以就設計成後台離線計算模式了。當前正在改造,將分紅送配邏輯做成離線計算,股價組成的凈值實時計算。介面請求是,將實時計算部分和離線計算部分合並成最終結果。

實際上,我們的計算邏輯是比較低效的:循環遍歷所有的組合,對每個組合,獲取所有的價值數據,然後計算。完成一遍循環後,立即開始下一輪循環。

優化:

分級:活躍用戶的活躍組合,其它組合。
批量:拉取當前所有股票的現價到 JVM 內存里,這一輪的所有組合計算都用這一份股價快照。
關於這個話題的更詳細內容,感興趣的可以參考雪球組合業務總監張岩楓在今年的 arch summit 深圳大會上的分享:構建高可用的雪球投資組合系統技術實踐 http://sz2015.archsummit.com/speakers/201825

最後,我們還做了一些通用的架構和性能優化,包括jdk升級到8,開發了一個基於 zookeeper 的 config center 和開關降級系統

四. 聊聊關於架構優化的一些總結和感想

在各種場合經常聽說的架構優化,一般都是優化某一個具體的業務模塊,將性能優化到極致。而在雪球,我們做的架構優化更多的是從問題出發,解決實際問題,解決到可以接受的程度即可。可能大家看起來會覺得很凌亂,而且每個事情單獨拎出來好像都不是什麼大事。

我們在對一個大服務做架構優化時,一般是往深入的本質進行挖掘;當我們面對一堆架構各異的小服務時,「架構優化」的含義其實是有一些不一樣的。大部分時候,我們並不需要(也沒有辦法)深入到小服務的最底層進行優化,而是去掉或者優化原來明顯不合理的地方就可以了。

在快速迭代的創業公司,我們可能不會針對某一個服務做很完善的架構設計和代碼實現,當出現各種問題時,也不會去追求極致的優化,而是以解決瓶頸問題為先。

即使我們經歷過一回將 snowball 拆分服務化的過程,但當我們重新上一個新的業務時,我們依然選擇將它做成一個大一統的服務。只是這一次,我們會提前定義好每個模塊的 service 介面,為以後可能的服務化鋪好路。

在創業公司里,重寫是不能接受的;大的重構,從時間和人力投入上看,一般也是無法承擔的。而「裱糊匠」式做法,哪裡有性能問題就加機器,加緩存,加資料庫,有可用性問題就加重試,加log,出故障就加流程,加測試,這也不是雪球團隊工作方式。我們一般都採用最小改動的方式,即,准確定義問題,定位問題根源,找到問題本質,制定最佳方案,以最小的改動代價,將問題解決到可接受的范圍內。

我們現在正在所有的地方強推3個數據指標:qps,p99,error rate。每個技術人員對自己負責的服務,一定要有最基本的數據指標意識。數字,是發現問題,定位根源,找到本質的最重要的依賴條件。沒有之一。

我們的原則:保持技術棧的一致性和簡單性,有節制的嘗試新技術,保持所有線上服務依賴的技術可控,簡單來說,能 hold 住。

能用cache的地方絕不用db,能非同步的地方,絕不同步。俗稱的:吃一塹,長一智。

特事特辦:業務在發展,需求在變化,實現方式也需要跟著變化。簡單的來說:遺留系統的優化,最佳方案就是砍需求,呵呵。

❺ 有哪些比較好的大數據培訓機構

大數據培訓機構推薦:北京千鋒教育、光環大數據、江蘇萬和計算機培訓中心、千鋒教育、煙台大數據培訓。

1、北京千鋒教育

千鋒教育開設HTML5前端、Java、Python、全鏈路設計、雲計算、軟體測試、大數據、智能物聯網、Unity游戲開發、Go語言開發、網路安全、互聯網營銷學科,並推出軟考、Adobe認證、PMP認證、紅帽RHCE認證課程,千鋒年培養優質人才20000餘人,全國同期在校學員8000餘人。

5、煙台大數據培訓

依託於大數據世界論壇(BDWF | Big Data World Forum),大數據培訓學院擁有豐富的師資資源、國際同步的課程體系與優質的服務流程。大數據學院教育培訓項目的服務人群包括:希望事業和職務發展中更進一步的高級技術人才;未來希望以大數據技術、營銷、市場、管理、研究等為事業和職業目標為相關人員等。

❻ R,Python,Scala和Java,到底該使用哪一種大數據編程語言

R語言:它的有點在於簡單易上手,通過R語言,你可以從復雜的數據集中篩選你想要的數據,從負責的模型函數中操作數據,建立有序的圖表呈現數字,只需要幾行代碼就可以了,比如說,像是好動版本的Excel表格。
Pythom語言:Python結合了R語言的快速,處理復雜數據的能力以及更務實的語言特質,迅速地成為主流,也更簡單和直觀了,尤其是近幾年的成長很快。在數據處理范疇內,通常在規模與復雜之間要有個取捨,Python以折中的姿態出現,是相當好的數據處理工具。
java語言:java沒有和Python和R語言一樣好的可視化功能,也不是統計建模的最佳工具,但是如果你需要建立一個龐大的系統,使用過去的原型,java是最基本的選擇了。
Hadoop pand
Hive:為了迎合大量數據處理的需求,以java為基礎的大數據開始了。Hadoop為一批數據處理,發展以java為基礎的架構關鍵,相對於其他處理工具,Hadoop慢許多,但是無比的准確可被後端資料庫分析廣泛使用,和Hive搭配的很好。
Scala:另一個以java為基礎的語言,和java很像,對任何想要進行大規模的機械學習或是建立高階的演算法,Scala是逐漸興起的工具,善於呈現且擁有建立可靠系統的能力。
Kafkaand Storm:是一個特別快速的查詢信息系統,缺點是太快了,因此在實施操作時會犯錯,有時候會漏掉東西。使用Scala寫出來的架構,大幅增加他在串流處理的受歡迎程度。

❼ 類似python的Matplotlib,spark/scala有沒有數據可視化庫或者工具

類似python的Matplotlib,spark/scala有沒有數據可視化庫或者工具
spark很年輕,所以很多可視化工具正在發展過程中,值得關注的有 Apache Zepplin , Spark Notebook andypetrella/spark-notebook · GitHub, 以上兩個是開源的,當然還有Databricks 自己的cloud,這個是收費的。

❽ R,Python,Scala 和 Java,到底該使用哪一種大數據編程語言

哪一種都行,Python適用於腳本,網路和爬蟲,Java適用網路,商業和游戲,r適用於腳本和網路

❾ 類似python的Matplotlib,spark/scala有沒有數據可視化庫或者工具

大數據魔鏡的,雲平台的永久免費的,基礎的版本離線安裝使用的,也是免費的,可視化的效果庫使用的是網路的Echarts和D3.js的,有興趣你可看一下,更高級的版本的是要收費的,屬於定製版本,分別為高級企業版,hadoop版

熱點內容
限電和鋰電池基金有什麼關系嗎 發布:2025-01-31 16:47:41 瀏覽:211
郵政儲蓄理財日日升利率多少 發布:2025-01-31 16:39:16 瀏覽:53
黃金期貨買多賣空什麼意思 發布:2025-01-31 16:39:11 瀏覽:349
中國數字貨幣會有什麼影響 發布:2025-01-31 16:26:46 瀏覽:596
如何在金融市場穩定收益 發布:2025-01-31 15:49:33 瀏覽:429
股票投資平台詐騙案件 發布:2025-01-31 15:47:52 瀏覽:486
福建創識科技股份有限公司股票 發布:2025-01-31 15:40:34 瀏覽:723
如何認識貨幣的職能及其相互關系 發布:2025-01-31 15:26:23 瀏覽:775
辦理住房基金在哪裡 發布:2025-01-31 15:26:10 瀏覽:373
除了買基金還有什麼方法 發布:2025-01-31 15:21:51 瀏覽:357