把调度和任务执行,隔离成两个部分: 调度中心 只需要负责任务调度属性,触发调度命令 执行器 执行器接收调度命令,去执行具体的业务逻辑 两者都可以进行横向扩容。 1 MQ 调度中心依赖Quartz集群模式,当任务调度时,发送消息到RabbitMQ 。业务应用收到任务消息后,消费任务信息。 充分利用MQ解耦: 调度中心发任务 应用方作为执行器,接收任务并执行 1.1 缺点 多引入中间
1 Quartz 任务调度整体流程: 1.1 组件 调度器 :工厂类创建Scheduler,根据触发器定义的时间规则调度任务 任务:Job表示被调度的任务 触发器:Trigger 定义调度时间的元素,按啥时间规则执行任务。一个Job可被多个Trigger关联,但是一个Trigger 只能关联一个Job import org.quartz.*; import org.quartz.Schedu
如果想要下载网页里出现的图片,最简单的方法就是在图片按下右键选择「另存图片」。 但若下载的图片数量较多,一个一个保存很浪费时间,就用图片下载工具辅助吧! 1 Image Extractor 免费的网页图片下载工具,可从任何公开页面提取图片,使用虚拟浏览器来模拟浏览效果。有别一般下载器,[Image Extractor]需几s时间以确保在网页中尽可能找到所有看得到的图片(很多网站采用延迟载入技术,没
2 ScyllaDB 号称下一代 NoSQL,C++编写充分利用 Linux 底层原语优势,利用现代多核、多处理器 NUMA 服务器硬件,卓越性能,API 兼容 Cassandra 和 DynamoDB: 支持和 Cassandra 一样的 CQL 查询语言和驱动,一样的 SSTable 存储格式 同样支持和 DynamoDB 一样的 JSON-style 查询和驱动 2.1 架构 2.1.1
1 概览 DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 1.1 设计理念 为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。 当需要接入一个新的数据源的时候,只需要将此数据源
分布式数据库“强一致性”包括数据一致性和事务一致性两个方面。今天谈事务一致性。不少人觉得ACID落伍,BASE为理论基础的NoSQL才是潮流。BASE是很宽泛定义,承诺有限。我认为,BASE的意义只在于放弃了ACID的一些特性,从而更简单地实现了高性能和可用性,达到一个新的平衡。但是,架构设计上的平衡往往都是阶段性的,随新技术突破,原来平衡点也自然改变。不说分布式数据库,就连NoSQL也开始增加对
1 binlog、redo log配合崩溃恢复 反证法,若无两阶段提交(2PC),会导致MySQL主备数据不一致。 2PC的不同瞬间,MySQL若异常重启了,又该如何保证数据完整性?1.1 2PC上图即update语句执行流程,其中的commit语句:【commit语句】,指MySQL语法中,提交一个事务的命令。一般跟begin/start transaction配对而图中的【commit步骤】
1 最基础绑定事件<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Vue中的事件处理</title> <script src="../vue.js"></script> <
1 v-if V.S v-show<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Vue中的条件渲染</title> <script src="../vue.js"></script&
1 前言完整的性能分析案例的第一部分,打开首页接口做压力场景,分析性能问题。将看到各种基础硬件设施层面的性能问题,如由虚机超分导致的性能问题、CPU运行模式下的性能问题、IO高、硬件资源耗尽但TPS很低的问题等。如你从零开始做一个完整项目,这些问题很可能是你首先要面对的。把它们解决好,是性能分析人员必备的一种能力。不同计数器采集的数据,分析链路不同,而这个分析链路就是我一直强调的证据链。有些性能问
1 云计算服务模式1.1 IAAS基础设施即服务(Infrastructure as a Service),云服务提供商会提供基础设施,例如虚拟计算机、存储、网络和操作系统等,用户可以根据自己的需求来租用这些基础设施,并根据需要配置和管理它们。用户可以根据自己的需求来选择计算、存储和网络资源,并且只需要为他们实际使用的资源付费。优点灵活性:用户可以根据自己的需求来选择和配置所需的资源,以满足其特定
性能项目中,性能数据是重要的输入资源。但有人用极少的数据,来做较大压力,显然不符合真实场景,虽然拿到的结果好看,但无价值。性能场景中的数据到底应该做成啥样?RESAR性能工程中,场景里使用的数据要满足:符合真实环境中的数据分布才能模拟出相应的IO操作符合真实用户输入的数据以真正模拟真实环境中的用户操作分别对应:铺底数据和参数化数据。1 铺底数据线上系统架构中,系统常用到的数据分为:静态数据(红点)
POI-TL是一个用于生成Office文档的Java库,Configure类是该库中的一个配置类,其作用是提供了一些全局的配置选项,可以用于定制化生成的文档。<!-- poi-tl是基于Apache POI的Word模板引擎。poi-tl依赖的是poi4.1.2版本 --> <dependency> <groupId>com.deepoove<
1 传统网络模型1.1 PPC 和 preforkProcess per connection一种常见的多进程并发服务器架构。在该架构中,对每个客户端连接请求创建一个新子进程,来处理该客户端的请求和响应。即当有多个客户端连接时,服务端就会启动多个子进程进行并发处理,从而提高服务器的并发性和处理性能。ppc模型中,在父进程中监听客户端连接请求,并接受客户端连接。每当有一次新的客户端连接请求被接受时,
先生存,后发展!1 业务背景假设你现在正在一个创业公司担任 CTO,因为微信工作生活娱乐不区分,已经发生了很多次将敏感信息(可以自行脑补一下)发错人甚至发错群的尴尬事件了! 你司 CEO 决定做一款IM工具,为了区别微信和 QQ 大众化的 IM 需求,你们公司主打安全IM,这款产品的竞争力如下:主打私密聊天,严格控制私密好友的数量,而不是像微信一样,买个菜都可能要加个微信。公司背景技术团队大约10
1 代码重构定义对软件代码做任何改动以增加可读性或者简化结构而不影响输出结果。目的增加可读性、增加可维护性、可扩展性3 关键点不影响输出不修正错误不增加新的功能性代码重构时,发现有个功能实现逻辑不合理,可直接修改吗?当然不可!2 架构重构定义通过整系统结构(4R)来修复系统质量问题而不影响整体系统能力。目的修复质量问题(性能、可用性、可扩展......)关键点修复质量(架构,而非代码层面的质量)问
容量场景中,每个业务比例都要符合真实业务场景的比例。不符合,那场景的执行结果也没意义。但很多性能人员因为对业务模型的抽取过程不了解或拿不到具体数据,导致业务模型和生产业务场景不匹配,整个性能项目都变得无意义也有大量项目,并没有拿历史业务数据做统计,直接非常笼统地拍脑袋,给出相应业务模型,也不合理也有人为让业务模型和真实业务场景尽可能匹配,直接拿生产环境的请求进行回放。可是,即便我们拿生产环境的请求
1 概述1.1 整合添加依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>启动应用,会观察到如下日志:
网页爬虫,解析已爬取页面中的网页链接,再爬取这些链接对应网页。而同一网页链接有可能被包含在多个页面中,这就会导致爬虫在爬取的过程中,重复爬取相同的网页。1如何避免重复爬取?记录已爬取的网页链接(也就是URL),在爬取一个新的网页之前,我们拿它的链接,在已经爬取的网页链接列表中搜索:存在,这网页已被爬过不存在,还没被爬过,可继续去爬等爬取到这网页后,将这网页的链接添加到已爬取的网页链接列表。如何记录
1 分布式问题定位障碍生产环境,代码在线上运行业务,不能debug,可查看当前异常日志。案例分布式的应用系统,启动4个子服务:服务A、B、C、D,服务依赖关系A->B->C->D,部署在不同机器。RPC调用中,若服务端业务逻辑异常,就会把异常抛给调用端,若现在这调用链中有个服务异常,如何定位问题?第一反应打印日志,那就打日志。假如这时发现A异常,这异常其实可能因B或C或D异常抛回
RPC里面该如何提升单机资源的利用率,你要记住的关键点就一个,那就是“异步化”。调用方利用异步化机制实现并行调用多个服务,以缩短整个调用时间;而服务提供方则可以利用异步化把业务逻辑放到自定义线程池里面去执行,以提升单机的OPS。1 为何要考虑安全问题?RPC是解决应用间互相通信的框架,而应用之间的远程调用过程一般不会暴露在公网,RPC一般用于内部应用通信。“内部”指应用都部署在同一大局域网。相对公
1 关闭为什么有问题?系统为啥非要拆分?更方便、更快速迭代业务,但也得经常更新应用系统,时不时还老要重启服务器。重启服务过程中,RPC怎么做到让调用方系统不出问题?2 上线流程当服务提供方要上线,一般通过部署系统完成实例重启。此间,服务提供方的团队并不会事先告诉调用方他们需要操作哪些机器,从而让调用方去事先切走流量。对调用方来说,它也无法预测服务提供方要对哪个机器重启,因此负载均衡就可能把要正重启
1 为什么选择路由策略?真实环境的服务提供方以集群提供服务,对服务调用方,就是一个接口会有多个服务提供方同时提供服务,所以RPC每次发起请求时,要从多个服务提供方节点里选择一个用于发请求的节点。这次请求无论发送到集合中的哪个节点上,返回结果都一样。每次上线应用的时候都不止一台服务器会运行实例,上线涉及变更,只要变更就可能导致原本正常运行的程序异常。为减少这种风险,一般选择灰度发布应用实例,如先发布
服务发现的作用:实时感知集群IP的变化,实现接口跟服务集群节点IP的映射。超大规模集群更要考虑最终一致性。“推拉结合,以拉为准”。1 健康检测因为有了集群,所以每次发请求前,RPC框架会根据路由和负载均衡算法选一个具体的IP地址。为保证请求成功,就要确保每次选出来的IP对应连接是健康的。但调用方跟服务集群节点之间的网络状况瞬息万变,两者之间可能会闪断或网络设备损坏等,怎么保证选出来的连接一定可用?
1 gRPCGoogle 开发并且开源的一款高性能、跨语言的 RPC 框架,当前支持 C、Java 和 Go。跨语言,通信协议基于HTTP/2,序列化支持 PB(Protocol Buffer)和 JSON。调用示例:定义一个 say 方法,调用方通过 gRPC 调用服务提供方,然后服务提供方会返回一个字符串给调用方。为了保证调用方和服务提供方能够正常通信,我们需要先约定一个通信过程中的契约,即
实现过统一拦截吗?如授权认证、性能统计,可以用 Spring AOP,不需要改动原有代码前提下,还能实现非业务逻辑跟业务逻辑的解耦。核心就是动态代理,通过对字节码进行增强,在方法调用时进行拦截,以便于在方法调用前后,增加处理逻辑。1 远程调用的魔法使用 RPC,一般先找服务提供方要接口,通过 Maven 或其他工具把接口依赖到我们项目。编写业务逻辑时,若要调用提供方的接口,只需通过依赖注入把接口注
HTTP协议(本文HTTP默认1.X)跟RPC协议又有什么关系呢?都属于应用层协议。1 HTTP协议浏览器收到命令后会封装一个请求,并把请求发送到DNS解析出来的IP上,抓包:2 协议的作用没有协议就不能通信吗?只有二进制才能在网络中传输,所以RPC请求在发送到网络中之前,他需要把方法调用的请求参数转成二进制;转成二进制后,写入本地Socket,然后被网卡发送到网络设备。传输过程中,RPC不会把请
Unix管道和TCP将恰好一个发送者与恰好一个接收者连接,而一个消息传递系统允许多个Pro节点将消息发到同一主题,并允许多个Con节点接收主题的消息。若生产者发送消息的速度>消费者能够
内存紧张时,会触发内存回收,内存回收会尝试回收reclaimable(可被回收的)内存,这部分内存既包含Page Cache又包含reclaimable kernel memory(比如slab):Reclaimer指回收者,可以是内核线程(包括kswapd)、用户线程。回收时,它会依次扫描pagecache page、slab page中有哪些可被回收:若有,就尝试去回收若无,就跳过在扫描可回收
Page Cache太易回收而导致的问题,大致可分为:误操作,导致Page Cache被回收,进而导致业务性能下降明显内核的一些机制导致业务Page Cache被回收,从而引起性能下降若业务数据对延迟敏感或你的业务指标对TP99(99分位)要求较高,你更需要关注这些问题。言归正传,我们来看下发生在生产环境中的案例。1 对Page Cache操作不当产生的业务性能下降分析误操作导致Page Cach
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号