当前位置:首页 » 股票交易 » 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 19:46:08 浏览:965
海豚股票软件下载手机版官方下载 发布:2025-01-31 19:18:50 浏览:136
建信添益基金怎么买 发布:2025-01-31 19:02:04 浏览:111
九州期货公司如何 发布:2025-01-31 19:00:17 浏览:105
000733掁华科技股票 发布:2025-01-31 18:55:18 浏览:689
上海期货交易所会员持仓怎么查 发布:2025-01-31 18:50:16 浏览:566
超华科技股票资金流入 发布:2025-01-31 18:41:12 浏览:316
如何在期货市场翻身 发布:2025-01-31 18:33:33 浏览:945
股票市场历史上的在家失败案例 发布:2025-01-31 18:03:11 浏览:634
地产股票涨停是什么意思 发布:2025-01-31 17:46:09 浏览:610