事件记录

kafka实现分布式事务

笑着哭i 提交于 2019-11-30 19:14:35
分布式事务 概念: 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。 本质上来说,分布式事务就是为了保证不同数据库的数据一致性。实现分布式事务方案有很多种,有阿里的seata,基于tcc的高性能分布式事务框架hmily和lcn等开源框架外,还有基于mq来实现分布式事务解决方案(常见的有rabbitmq、kafka等)。本文介绍基于kafka简单实现原理。 描述: 不同于单一架构应用(Monolith), 分布式环境下, 进行事务操作将变得困难, 因为分布式环境通常会有多个数据源, 只用本地数据库事务难以保证多个数据源数据的一致性. 这种情况下, 可以使用两阶段或者三阶段提交协议来完成分布式事务.但是使用这种方式一般来说性能较差, 因为事务管理器需要在多个数据源之间进行多次等待. 有一种方法同样可以解决分布式事务问题, 并且性能较好, 这就是我这篇文章要介绍的使用事件,本地事务以及消息队列来实现分布式事务. 我们从一个简单的实例入手. 基本所有互联网应用都会有用户注册的功能. 在这个例子中, 我们对于用户注册有两步操作: 注册成功, 保存用户信息.

activiti数据表介绍

…衆ロ難τιáo~ 提交于 2019-11-30 10:06:45
activiti6.0数据库介绍 Acitiviti6.0数据库中一共有28张表,表的命名都是以ACT_开头的。第二部分是一个两个字符用例表的标识。 数据库描述 ACT_GE_* 通用数据表 GE代表General;普通数据,各种情况都使用的数据。 ACT_RE_* 流程定义存储表 RE代表Repository;包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。 ACT_RU_* 运行时记录表 RU代表Runtime;这些表存储运行时信息,例如流程实例(process instance)、用户任务(user task)、变量(variable)、作业(job)等。activiti只在流程实例运行中保存运行时数据,并在流程实例结束时删除记录。这是为了保证运行时表尽量的小并运行的足够快。 ACT_ID_* 身份信息表 ID 代表 Identity;这些表包含身份信息,例如用户、组等。 ACT_HI_* 历史数据表 HI代表 history;这些表中保存的都是历史数据,比如执行过的流程实例、变量、任务,等等。Activit默认提供了4种历史级别: none : 不保存任何历史记录,可以提高系统性能; activity :保存所有的流程实例、任务、活动信息; audit :也是Activiti的 默认 级别,保存所有的流程实例、任务、活动、表单属性; full :最完整的历史记录

分布式跟踪系统-cicada

好久不见. 提交于 2019-11-30 04:49:14
https://github.com/Yirendai/cicada/blob/master/cicada-docs/cicada_design.md 背景与目标 面对日趋复杂的分布式系统,如服务框架、消息中间件、缓存、数据层等,我司在业务性能瓶颈定位、故障排除等方面效率低下,生产环境中没有成熟的Trace工具,我们认为分布式跟踪系统适合且急需引入公司内部。 Trace系统需要能够透明的传递调用上下文,理解系统行为,理清后端调用关系,实现调用链跟踪,调用路径分析,帮助业务人员定位性能瓶颈,排查故障原因等;同时,需要对用户尽量透明,减少对业务代码的侵入性。 我们的Trace系统为解决以上问题而设计。 理论依据 目前可查的分布式跟踪系统,设计思想都源于Google的论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》。 现有Trace系统调研 调研期间,我们同时参考了其他互联网企业分布式跟踪系统的原理以及应用场景,例如阿里的Eagle eye,Twitter的Zipkin,京东的hydra以及点评的CAT。 Google Dapper && Alibaba Eagle eye 从实现来看,阿里的实现最接近Dapper论文中提到的方式。 Eagle eye架构如下图所示: 日志收集方式 记录本地文件

JavaScript学习记录

妖精的绣舞 提交于 2019-11-30 04:37:37
菜鸟整理笔记(如果有不对的地方可以评论call我噢~) 数据类型 JS代码原则:高内聚,弱耦合 ecmascript是一种语言标准,第一版标准发布于1997年,javascript是网景公司对ecmascript标准的一种实现。 js不区分整数和浮点数,统一用number表示,nan表示 not a number,无法计算结果的时候用nan表示。 字符串string,是以单引号或者双引号括起来的任意文本,比如'abc',"abc". 布尔值boolean,布尔值只有两种值,true或者false。 &&与,||或,!非。 编程形式的区别:面向对象、面向过程 typeof:六种数据类型:number string boolean undefined object function typeof返回的是对象的两个object:null和{} 浏览器组成 shell部分 内核部分 渲染引擎(html和css基础语法识别、语法规则和渲染) js引擎 其他模块 2008年谷歌发布最新浏览器chrome,能把js代码直接转化成机械码来执行。 js特点 js是解释性语言(浏览器读一行翻译一行,php/python也是解释性语言) 优点:跨平台、单线程(异步传输数据:) 不足:速度较慢 js标准 标准是由ecma制定的 所以有时候也叫ecmascript 延申两个部分dom bom js三大部分

怎样记录访问者打开网页和关闭网页的信息

走远了吗. 提交于 2019-11-30 04:28:51
通过监听 window.onload 和 window.onunload事件, 使用 Navigator.sendBeacon() 进行HTTP请求: // HTML 代码如下 // <body onload="analytics('start')" onunload="analytics('end')"> function analytics(state) { if (!navigator.sendBeacon) return; var URL = 'http://example.com/analytics'; var data = 'state=' + state + '&location=' + window.location; navigator.sendBeacon(URL, data); } 来源: https://www.cnblogs.com/aisowe/p/11559854.html

分布式系统理论基础 - 时间、时钟和事件顺序

不问归期 提交于 2019-11-29 17:18:47
十六号…… 四月十六号。一九六零年四月十六号下午三点之前的一分钟你和我在一起,因为你我会记住这一分钟。从现在开始我们就是一分钟的朋友,这是事实,你改变不了,因为已经过去了。我明天会再来。 —— 《阿飞正传》 现实生活中时间是很重要的概念,时间可以记录事情发生的时刻、比较事情发生的先后顺序。分布式系统的一些场景也需要记录和比较不同节点间事件发生的顺序,但不同于日常生活使用物理时钟记录时间,分布式系统使用逻辑时钟记录事件顺序关系,下面我们来看分布式系统中几种常见的逻辑时钟。 物理时钟 vs 逻辑时钟 可能有人会问,为什么分布式系统不使用物理时钟(physical clock)记录事件?每个事件对应打上一个时间戳,当需要比较顺序的时候比较相应时间戳就好了。 这是因为现实生活中物理时间有统一的标准,而分布式系统中每个节点记录的时间并不一样,即使设置了 NTP 时间同步节点间也存在毫秒级别的偏差[1][2]。因而分布式系统需要有另外的方法记录事件顺序关系,这就是逻辑时钟(logical clock)。 Lamport timestamps Leslie Lamport 在1978年提出逻辑时钟的概念,并描述了一种逻辑时钟的表示方法,这个方法被称为Lamport时间戳(Lamport timestamps)[3]。 分布式系统中按是否存在节点交互可分为三类事件,一类发生于节点内部,二是发送事件

前端学习记录 JS DOM

浪尽此生 提交于 2019-11-29 13:48:01
HTML DOM 文档对象模型 被结构化为对象树 HTML DOM 方法是能在 HTML 元素上执行的动作 HTML DOM 属性是能够设置或改变 HTML 元素的值 查找 HTML 元素    document.getElementById(id) 通过元素 id 查找   document.getElementByTagName(name) 通过标签名查找   document.getElementByClassName(name) 通过类名查找元素 改变 HTML 元素    element.innerHTML = new html content 改变元素的 inner HTML   element.attribute = new value 改变 HTML 元素的属性值   element.setAttribute(attribute, value) 改变 HTML 元素属性值   element.style.property = new style 改变 HTML 元素样式 删除和添加元素    document.createElement(element) 创建 HTML 元素   document.removeChild(element) 删除 HTML 元素   document.appendChild(element) 添加 HTML 元素   document

专职DBA-MySQL日志管理2

让人想犯罪 __ 提交于 2019-11-29 12:35:21
专职DBA-MySQL日志管理2 [root@db01 ~]# mysqld --defaults-file=/data/mysql/3306/my.cnf & [root@db01 ~]# ps -ef | grep mysql [root@db01 ~]# netstat -lnp | grep mysql [root@db01 ~]# mysql -S /data/mysql/3306/mysql.sock -p 错误日志(log_error): 文本形式记录MySQL启动,关闭,日常运行过程中所有状态信息,警告,错误。 错误日志配置,默认就是开启的:/数据目录下/hostname.err 手工设定: mysql> select @@log_error; +----------------------------+ | @@log_error | +----------------------------+ | /data/mysql/3306/error.log | +----------------------------+ 1 row in set (0.01 sec) mysql> show global variables like "log_error"; [root@db01 ~]# grep "log_error" /data/mysql/3306/my

如何设计一张事件记录流水表(版本1)

你离开我真会死。 提交于 2019-11-28 19:52:24
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/u011692924/article/details/82422959 目前新功能在试点范围内上线试用,业务关心新功能的试用情况,需要对生产数据进行统计和汇总,以便跟旧功能在流程上做一些比较分析。我们需要配合的是,跟大数据团队一起,提供几个数据基表,其中要有一张表,能够记录新功能的全生命周期。 统一抽象来说,解决的是: 谁( Who )什么时候( When )以什么身份( Role )在什么地点( Where ),对什么东西( What )做了什么事( Something ),导致该东西从什么状态( StateA ),翻转成什么状态( StateB ) 。 基于上面的出发点,我们想采用 状态机 的思路, 状态A通过动作A转换成状态B(stateA + actionA = stateB) ,这样就可以把对象从创建、修改、到最后的核销,整个生命周期过程都有对应的事件记录。 一开始,我们设计了如下版本1的表: 版本1:事件记录表 db_event_report 流水ID id 对象ID obj_id 系统编码 sys_code 网点编码 area_code 操作者工号 operator_id 源状态 source_status

HierarchyViewer的一些分析记录

无人久伴 提交于 2019-11-28 02:20:37
* 进入系统后先通过ADB建立与手机的连接 POINT LIST: A DeviceSelector 用于选择 设备或者Activity B DeviceBridge.loadWindowData C DeviceSelectionModel.getModel().addDevice(device, windows, viewServerInfo); 、 D 用户:DeviceSelectionModel.getModel().setSelection(device, w); E HierarchyViewerDirector.loadViewHierarchy * 绑定点击事件,点击后获取单个Activity(window)的详细信息 Inspect Screenshot A HierarchyViewerDirector.inspectScreenshot B PixelPerfec.selectionChanged C PixelPerfec.mPaintListener (bind to mCanvas) 转载于:https://www.cnblogs.com/TLightSky/archive/1970/01/01/2941446.html 来源: https://blog.csdn.net/weixin_30569153/article/details/99919885