首页
学习
活动
专区
工具
TVP
发布

函数式编程语言及工具

专栏作者
283
文章
264470
阅读量
67
订阅数
alpakka-kafka(10)-用kafka实现分布式近实时交易
  随着网上购物消费模式热度的不断提高,网上销售平台上各种促销手段也层出不穷,其中“秒购”已经是各种网站普遍流行的促销方式了。“秒购”对数据的实效性和精确性要求非常高,所以通过分布式运算实现高并发数据处理应该是正确的选择。不过,高并发也意味着高频率的数据操作冲突,而高频使用“锁”又会严重影响效率及容易造成不可控异常,所以又被迫选择单线程运行模式。单线程、分布式虽然表面相悖,不过如上篇博文所述:可以利用akka-cluster-sharding分片可指定调用的特性将一种商品的所有操作放到同一个shard上运算(因为shard即是actor,mailbox里的运算指令是按序执行的)可容许在一个分布式环境下有多个分片来同时操作。如此可在获取分布式运算高效率的同时又保证了数据的安全性和完整性。
用户1150956
2022-05-10
3100
alpakka-kafka(4)-kafka应用案例-系统分析
上一篇我们通过示范案例基本了解了一个独立交易类型的库存管理模块应该是怎样的一块业务。这篇我们讨论一些如何从技术上来实现这样的业务模块。讲确切点应该说如何借助kafka的特性来实现功能开发。
用户1150956
2021-04-01
4710
alpakka-kafka(3)-kafka应用案例-需求分析
在大型复杂的应用中,业务模块之间总是相互关联,相互纠缠。无论对业务管理或软件开发方面都会造成困惑:从业务管理方面难以厘清确切的管理范围和职责:就是说不知一项业务具体谁来管。在软件开发方面则无法确定开发人员的具体分工和维护责任,即确定一项业务功能具体靠谁来修改、优化。拿一个普通的网上购物过程来说,除商品拣选过程外的优惠价选定、库存扣减、支付又会涉及商品定价管理、库存管理、财务管理等独立的业务模块。如果纯从软件开发角度来描述:负责开发购物流程的开发人员还需要兼顾优惠价计算、库存扣减、支付等业务操作。因为商品定价、库存管理、财务管理等都有可能是其它人负责开发的业务模块。一件商品拣选有可能造成该商品的定价调整、库存变动可能驱动采购、配货等业务的发生、支付也会是一些财务操作的启动原因。购物流程开发人员应该是不容许直接去实现这些业务操作的。为了解决这些矛盾,必须先实现业务模块的松散耦合。听起来有点像CQRS,不过是更广义的domainRS业务模块分离。在接触kafka之前,我们一般用soa模式由负责一块业务功能开发的程序员提供一套完整的对外业务操作api,就可以实现程序员各自独立工作,各管自己的一亩二分地。不过,完成的系统经常会出现内部处理业务速度跟不上外部api调用频率的情况,轻者拖滞api调用线程,重则造成业务处理异常。这个时候kafka应该能在解决方案里发挥特殊作用:如果我们把kafka引入到业务模块集成,业务模块之间通过消息/事件队列event-queue进行沟通就可以实现更高程度的、更高效率的、交易事务类型的业务集成了。
用户1150956
2021-03-30
3170
akka-typed(9) - 业务分片、整合,谈谈lagom, 需要吗?
在讨论lagom之前,先从遇到的需求开始介绍:现代企业的it系统变得越来越多元化、复杂化了。线上、线下各种系统必须用某种方式集成在一起。从各种it系统的基本共性分析:最明显的特征应该是后台数据库的角色了,起码,大家都需要使用数据。另外,每个系统都可能具备大量实时在线用户、海量数据特性,代表着对数据处理能力有极大的要求,预示系统只有通过分布式处理方式才能有效运行。
用户1150956
2020-08-11
7590
search(4)- elastic4s-ElasticDsl
上次分析了一下elastic4s的运算框架。本来计划接着开始实质的函数调用示范,不过看过了Elastic4s的所有使用说明文档后感觉还是走的快了一点。主要原因是elasticsearch在7.0后有了很多重点调整改变,elastic4s虽然一直在源代码方面紧跟ES的变化,但使用文件却一直未能更新,所以从说明文档中学习elastic4s的使用方法是不可能的,必须从源码中摸索。花了些时间过了一次elastic4s的源码,感觉这个工具库以后还是挺有用的:一是通过编程方式产生json请求比较灵活,而且可以通过compiler来保证json语句的正确性。二是对搜索结果的处理方面:由于返回的搜索结果是一堆又长又乱的复杂json,不敢想象自己要如何正确的解析这些json, 然后才能调用到正确的结果,但elastic4s提供了一套很完善的response类,使用起来可能会很方便。实际上elastic4s的编程模式和scala语言运用还是值得学习的。既然这样,我想可能用elastic4s做一套完整的示范,包括:索引创建、索引维护、搜索、聚合统计等,对了解和掌握elastic4s可能大有帮助。在这之前,我们还是再回顾一下elastic4s的运算原理:elastic4s的功能其实很简单:通过dsl语句组合产生json请求,然后发送给ES-rest终端, 对返回的json结果进行处理,筛选出目标答案。
用户1150956
2020-04-23
5880
search(1)- elasticsearch结构概念
上篇提到选择了elasticsearch ES作为专业化搜索引擎的核心,这篇讨论一下ES的基本结构和应用概念。首先,从硬结构方面来讲:ES是在一个集群(cluster)环境里运行的,所以ES应该具备高可用和高扩展特性,因为系统可以分布在机器内无数个节点(node)服务器上运行。ES的索引(index)分布在集群中各node上。ES的index又可以向下分成多个shard分片。因为ES是基于lucent的,ES的shard就是一个完整的lucent index。所以,ES index是一个shard集合,也就是lucent index集合。在定义ES index时必须指定该index的shard(primary)数量,之后不得修改。这就意味着每个ES index需要占用一个以上shard,而shard是ES index操作的最小单元,也就是说一个shard只能存放一种ES index索引文件(document)。
用户1150956
2020-03-19
5710
restapi(0)- 平台数据维护,写在前面
在云计算的推动下,软件系统发展趋于平台化。云平台系统一般都是分布式的集群系统,采用大数据技术。在这方面akka提供了比较完整的开发技术支持。我在上一个系列有关CQRS的博客中按照实际应用的要求对akka的一些开发技术进行了介绍。CQRS模式着重操作流程控制,主要涉及交易数据的管理。那么,作为交易数据产生过程中发挥验证作用的一系列基础数据如用户信息、商品信息、支付类型信息等又应该怎样维护呢?首先基础数据也应该是在平台水平上的,但数据的采集、维护是在系统前端的,比如一些web界面。所以平台基础数据维护系统是一套前后台结合的系统。对于一个开放的平台系统来说,应该能够适应各式各样的前端系统。一般来讲,平台通过定义一套api与前端系统集成是通用的方法。这套api必须遵循行业标准,技术要普及通用,这样才能支持各种异类前端系统功能开发。在这些要求背景下,相对gRPC, GraphQL来说,REST风格的http集成模式能得到更多开发人员的接受。
用户1150956
2019-07-12
6840
Akka-CQRS(11)- akka-http for http-web-service: Marshalling-数据序列化
前面几篇讨论了关于gRPC方式的前后端连接集成方式。gRPC也是一个开放的标准,但讲到普及性就远远不及基于http/1.1协议的web-service了。特别是gRPC的前端编程还是有一定的门槛,所以作为一种开放的网络大平台还是必须考虑用web-service方式的集成。平台服务api可以有两样选择:一种是传统web-service方式,新的一种是rest api款式。rest api比较适合数据库表的crud操作。在2017年我曾经写了一系列博客介绍akka-http,这里就不再叙述它的细节了。这篇我们只聚焦在解决当前问题上。在POS控制平台例子里不会涉及到POST操作,应该全部是GET类型的,如:
用户1150956
2019-06-24
6020
Akka(36): Http:Client-side-Api,Client-Connections
   Akka-http的客户端Api应该是以HttpRequest操作为主轴的网上消息交换模式编程工具。我们知道:Akka-http是搭建在Akka-stream之上的。所以,Akka-http在客
用户1150956
2018-01-05
9830
Akka(37): Http:客户端操作模式
该文章是一篇关于技术社区和编辑人员如何参与社区管理、贡献技术文档并解决技术问题的文章。主要介绍了技术社区中编辑人员的工作职责和流程,包括技术社区的建立、文档的编辑和管理、技术问题的解决、社区沟通和贡献度量等方面的内容。文章还探讨了技术社区中的编辑人员如何与其他社区成员、管理团队和利益相关者进行协作和沟通,以确保社区的健康发展和成长。
用户1150956
2018-01-05
1.1K0
Akka(31): Http:High-Level-Api,Route rejection handling
用户1150956
2018-01-05
8950
Akka(32): Http:High-Level-Api,Route exception handling
用户1150956
2018-01-05
6350
Akka(29): Http:Server-Side-Api,Low-Level-Api
该文介绍了如何利用Akka HTTP构建一个基于HTTP的RESTful API,该API使用Akka Streams来处理流式数据,并使用Akka HTTP来处理HTTP请求。同时,该文还介绍了如何使用Akka HTTP构建一个简单的Web服务器,并使用它来处理HTTP请求。
用户1150956
2018-01-05
8570
Akka(30): Http:High-Level-Api,Routing DSL
该文章讲述了在技术社区中,从技术面试到工作交接的流程和注意事项。文章强调了技术社区的重要性,并描述了如何成为一名优秀的技术社区成员。
用户1150956
2018-01-05
1.3K0
Akka(18): Stream:组合数据流,组件-Graph components
   akka-stream的数据流可以由一些组件组合而成。这些组件统称数据流图Graph,它描述了数据流向和处理环节。Source,Flow,Sink是最基础的Graph。用基础Graph又可以组合
用户1150956
2018-01-05
1.1K0
Akka(23): Stream:自定义流构件功能-Custom defined stream processing stages
    从总体上看:akka-stream是由数据源头Source,流通节点Flow和数据流终点Sink三个框架性的流构件(stream components)组成的。这其中:Source和Sink是
用户1150956
2018-01-05
1.6K0
FunDA(7)- Reactive Streams to fs2 Pull Streams
    Reactive-Stream不只是简单的push-model-stream, 它还带有“拖式”(pull-model)性质。这是因为在Iteratee模式里虽然理论上由Enumerator负
用户1150956
2018-01-05
6780
FunDA(9)- Stream Source:reactive data streams
    上篇我们讨论了静态数据源(Static Source, snapshot)。这种方式只能在预知数据规模有限的情况下使用,对于超大型的数据库表也可以说是不安全的资源使用方式。Slick3.x已经
用户1150956
2018-01-05
6190
没有更多了
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档