架构
naixuejiaoyu
这个作者很懒,什么都没留下…
展开
-
奈学:Java 和 JavaScript 是什么关系?
一、什么是Javascript?它是运行在浏览器中的一种脚本语言,在web页面中,Javascript可谓是无所不能: 1. 可以操作HTML,提供了一种运行时改变HTML的工具; 2. 可以附加并执行事件,符合面向事件编程的思想; 3. 数据验证功能,在提交表单时对表单数据进行合法性验证; 4. 对客户浏览器的操作,前进、后退、刷新、跳转、打开新窗口、打印等; 5. 可以创建并使用Cookies. 二、什么是Java? Java是Sun公司推出的一种编程语言。它是一种通过解释方转载 2020-09-29 10:57:59 · 245 阅读 · 0 评论 -
奈学开发者社区分享:Java - 设计模式的7个设计原则
因为设计模式就是基于这些原则的实现,所以很有必要了解这些原则,下面主要对面向对象编程的几个原则进行简单介绍。1、单一职责原则 ( SRP )英文全称是Single Responsibility Principle,定义是一个类,应该只有一个引起它变化的原因。类变化的原因就是职责,如果一个类承担的职责过多,就等于把这些职责耦合在一起了。一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。而如果想要避免这种现象的发生,就要尽可能的遵守转载 2020-09-28 17:00:57 · 80 阅读 · 0 评论 -
Java中强、软、弱、虚四种引用详解
强引用 强引用就是指在程序代码之中普遍存在的,指创建一个对象并把这个对象赋给一个引用变量,并没有像其它三种引用一样有一个就具体的类来描述。对于强引用对象,即使内存不足,JVM宁愿抛出OutOfMemoryError (OOM)错误也不会回收这种对象。例如:Object object =new Object(); String str =“hello”; 如果想中断强引用和某个对象之间的关联,可以显示地将引用赋值为null,这样一来的话,JVM在合适的时间就会回收该对象。比如各种集合的移除方法.转载 2020-09-03 11:06:10 · 245 阅读 · 0 评论 -
Java创建对象的方法有哪些?
1.运用New 关键字创建实例,这是最常用的创建对象方法。2.运用反射,调用Java.lang.Class类当中newInstance方法。只能调用公共的无参构造函数。3.运用反射,调用java.lang.reflect.Constructor类中的newInstance方法提供无参或有参实例。除了无参构造器,还可以调用有参数的/私有的/受保护的构造函数。事实上Class的newInstance方法内部调用Constructor的newInstance方法。这也是众多框架Spring、Hibernate转载 2020-09-03 10:47:34 · 204 阅读 · 0 评论 -
奈学:Executor线程池的概述
Executor线程池来自于JDK1.5的JUC包,使用线程池的目的或者好处如下:实现线程资源的合理复用。线程资源属于操作系统核心资源之一,创建和销毁都需要占用系统资源和大量时间。使用线程池之后,不再需要开发者管理线程,线程的创建和销毁都交给线程池控制,实现线程的复用,减少线程资源的频繁的创建和销毁。提升任务执行效率。当新来一个线程任务的时候,由于具有线程复用计数因此可以直接利用现有的线程去执行任务,不需要新建线程,这样一定程度上提升了执行效率。可以对线程和线程任务实现实时监控和管理。比如目前活动线程转载 2020-08-27 10:42:50 · 124 阅读 · 0 评论 -
奈学:红黑树(RedBlackTree)的概述
AVL树与红黑树 AVL树是一种自平衡的二叉查找树,又称平衡二叉树。AVL用平衡因子判断是否平衡并通过旋转来实现平衡,它的平衡的要求是:所有节点的左右子树高度差不超过1。AVL树是一种高平衡度的二叉树,执行插入或者删除操作之后,只要不满足上面的平衡条件,就要通过旋转来保持平衡,而的由于旋转比较耗时,由此我们可以知道AVL树适合用于插入与删除次数比较少,但查找多的情况。 由于维护这种高度平衡所付出的代价可能比从中获得的效率收益还大,故而实际的应用不多,更多的地方是用追求局部而不是非常严格整体平衡的..转载 2020-08-26 19:27:58 · 130 阅读 · 0 评论 -
奈学:reaseShared共享式释放锁
共享锁的释放是通过调用releaseShared模版方法来实现的。大概步骤为:调用tryReleaseShared尝试释放共享锁,这里必须实现为线程安全。如果释放了锁,那么调用doReleaseShared方法环迅后继结点,实现唤醒的传播。对于支持共享式的同步组件(即多个线程同时访问),它们和独占式的主要区别就是tryReleaseShared方法必须确保锁的释放是线程安全的(因为既然是多个线程能够访问,那么释放的时候也会是多个线程的,就需要保证释放时候的线程安全)。由于tryReleaseShare转载 2020-08-18 19:01:53 · 187 阅读 · 0 评论 -
奈学:Executor框架的概述
JDK1.5之前,我们如果想要使用Java线程来完成相关任务,一般涉及两个类,一个是Thread类,一个Thread对象在启动(start)之后会创建一个关联的本地操作系统线程,随后会自动回调run方法。另一个是Runnable接口,可以看作 run方法的抽象,代表线程任务。通过Runnable和Thread的配合可以编写我们自己的多线程逻辑。 可以看到,此时Java对于多线程编程的支持还是比较原始的,功能也并不多。因此,在JDK1.5的JUC包中,对Java的多线程应用做了一次全面的扩展,比如新loc转载 2020-08-18 18:33:04 · 118 阅读 · 0 评论 -
什么是死锁?如何解决死锁?
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。产生死锁的原因,主要包括:系统资源不足;程序执行的顺序有问题;资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,那么死锁出现的可能性就很低;否则,就会因争夺有限的资源而陷入死锁。其次,程序执行的顺序与速度不同,也可能产生死锁。产生死锁的四个必要条件:互斥条件:一个资源每次只能被转载 2020-08-11 18:45:45 · 3242 阅读 · 0 评论 -
NIO的组成有哪些——奈学
Buffer:与Channel进行交互,数据是从Channel读入缓冲区,从缓冲区写入Channel中的flip方法 : 反转此缓冲区,将position给limit,然后将position置为0,其实就是切换读写模式clear方法 :清除此缓冲区,将position置为0,把capacity的值给limit。rewind方法 : 重绕此缓冲区,将position置为0DirectByteBuffer可减少一次系统空间到用户空间的拷贝。但Buffer创建和销毁的成本更高,不可控,通常会用内存池来提高转载 2020-08-06 10:35:34 · 108 阅读 · 0 评论 -
奈学:一起了解几种序列化协议
序列化(编码)是将对象序列化为二进制形式(字节数组),主要用于网络传输、数据持久化等;而反序列化(解码)则是将从网络、磁盘等读取的字节数组还原成原始对象,主要用于网络传输对象的解码,以便完成远程调用。影响序列化性能的关键因素:序列化后的码流大小(网络带宽的占用)、序列化的性能(CPU资源占用);是否支持跨语言(异构系统的对接和开发语言切换)。Java默认提供的序列化:无法跨语言、序列化后的码流太大、序列化的性能差XML,优点:人机可读性好,可指定元素或特性的名称。缺点:序列化数据只包含数据本身以及类的转载 2020-08-05 17:20:28 · 205 阅读 · 0 评论 -
NameNode和SecondaryNameNode工作机制
1.NameNode启动(1)首次启动需要格式化NameNode,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。(2)客户端对元数据进行增删改的请求。(3)NameNode记录操作日志,更新滚动日志。(4)NameNode在内存中对元数据进行增删改。2.SecondaryNameNode工作(1)SecondaryNameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。(2)SecondaryNameN转载 2020-07-28 19:03:38 · 98 阅读 · 0 评论 -
Django框架,Flask框架和Tornado框架各有什么优缺点
Django:Python 界最全能的 web 开发框架,battery-include 各种功能完备,可维护性和开发速度一级棒。常有人说 Django 慢,其实主要慢在 Django ORM 与数据库的交互上,所以是否选用 Django,取决于项目对数据库交互的要求以及各种优化。而对于 Django 的同步特性导致吞吐量小的问题,其实可以通过 Celery 等解决,倒不是一个根本问题。Django 的项目代表:Instagram,Guardian。Tornado:天生异步,性能强悍是 Tornado 的转载 2020-07-28 18:43:15 · 404 阅读 · 0 评论 -
Gossip 协议详解
Gossip protocol 也叫 Epidemic Protocol (流行病协议)。Gossip protocol在1987年8月由施乐-帕洛阿尔托研究中心发表ACM上的论文《Epidemic Algorithms for Replicated Database Maintenance》中被提出。原本用于分布式数据库中节点同步数据使用,后被广泛用于数据库复制、信息扩散、集群成员身份确认、故障探测等。Gossip协议是基于六度分隔理论(Six Degrees of Separation)哲学的体现转载 2020-07-22 19:00:42 · 646 阅读 · 0 评论 -
单体架构知识点及单体架构的缺陷
什么是单体架构一个归档包(例如war格式或者Jar格式)包含了应用所有功能的应用程序,我们通常称之为单体应用。架构单体应用的方法论,我们称之为单体应用架构,这是一种比较传统的架构风格。单体架构的缺陷 -1.复杂性高整个项目包含的模块非常多,模块的边界模糊,依赖关系不清晰,代码质量参差不齐,整个项目非常复杂。每次修改代码都心惊胆战,甚至添加一个简单的功能,或者修改一个BUG都会造成隐含的缺陷。2.技术债务逐渐上升随着时间推移、需求变更和人员更迭,会逐渐形成应用程序的技术债务,并转载 2020-07-08 17:49:43 · 588 阅读 · 0 评论 -
分布式事务精华总结篇
总述 -咱们前面分别对分布式事务的几个分支:XA、2PC、3PC、TCC、Saga、事务消息、最大努力事务进行的详细介绍。本篇作为分布式事务设计的收尾篇,讲对前面的内容查缺补漏和总结,最后对市面的一些开源框架做一些介绍。查缺补漏 -补偿型事务柔性事务分补偿型事务和通知型事务。但对补偿型事务没有进行详细介绍,那什么是补偿型事务呢,在Atomikos 公司Guy Pardon的论文《Business_Activities》中有这样的描述: 大致含义是,"补偿是一个..转载 2020-07-08 17:25:55 · 87 阅读 · 0 评论 -
分布式柔性事务之最大努力通知事务详解
一、概述咱们今天聊聊分布式事务系列中的最后一个方案:最大努力通知事务。最大努力通知事务的主流实现仍是基于MQ来进行事务控制。最大努力通知事务和事务消息都是通知型事务,主要适用于那些需要异步更新数据,并且对数据的实时性要求较低的场景。最大努力通知事务主要用于外部系统,因为外部的网络环境更加复杂和不可信,所以只能尽最大努力去通知实现数据最终一致性,比如充值平台与运营商、支付对接、商户通知等等跨平台、跨企业的系统间业务交互场景;而事务消息主要适用于内部系统的数据最终一致性保障,因为内部相对比较可控,比如订单和转载 2020-07-03 17:57:55 · 122 阅读 · 0 评论 -
分布式柔性事务之事务消息详解
消息详解 -一、概述在 《柔性事务之TCC详解》 和《柔性事务之Saga详解》两文中我们详细剖析了柔性事务的第一个分支补偿型事务。在《刚性事务总结和柔性事务概述》中我们介绍过的柔性事务包含补偿型事务和通知型事务。通知型事务主要包含事务消息和最大努力通知型分布式事务两个组成。通知型事务的核心思想是通过MQ来通知其他事务参与者自己事务的执行状态。MQ组件的引入有效的将事务参与者解耦开,各个参与者都可以异步执行,所以通知型事务又称为异步事务。事务消息的难度在于服务本地事务和投递消息的一致..转载 2020-06-29 18:47:17 · 156 阅读 · 0 评论 -
了解概率知识,概率作为机器学习的底层逻辑
爱因斯坦曾说:上帝不玩掷骰子。但是物理界薛定谔的猫和生物界女朋友的脾气就是不可测量,不可揣摩的两大难题。经常听各种段子,女朋友莫名的又生气了。我们试着从概率上解释下,女朋友生气是不是随机的(滑稽脸.jpg)。说到概率,有一个特别经典的问题:存在三个盒子,其中一个盒子中存放着大奖。现在你随机挑选了其中一个,中奖的概率是1/3。接着主持人打开了剩下2个盒子中的一个,没有中奖。问给你一次重选择的机会,你会怎么做?维持原来的选择 or 放弃原来的选择。随机随机是我们进行概率推导的基石之一。我们的统计学中经转载 2020-06-24 19:07:36 · 144 阅读 · 0 评论 -
奈学教育:“混沌工程”的基本理念和使用原则
混沌工程简介混沌工程师一门新兴的技术学科,它的初衷是通过实验性的方法,让人们建立复杂分布式系统能够在生产中抵御事件能力的信息。—— Principles of Chaos Engineering有没有这种感觉,当你写下第一行代码的时候,后面等着你的就是不断和系统中的各种错误做斗争?年纪大了,老是害怕在平时的工作中出各种各样五颜六色的问题,一出问题就整宿的加班通宵,熬到六亲不认,枸杞当饭吃。就好像写的代码会跳出来嘲讽你一样:百因必有果,你的报应就是我。实际生产环境中,各种不可预期的突发事件无可避免,系转载 2020-06-24 18:27:55 · 228 阅读 · 0 评论 -
奈学教育《P7架构师》课程大纲
孙玄与沈剑联手全新设计,《P7架构师》融合了业界数位大咖超10年开发经验以及他们的架构师成长经验。同时,课程由一线大厂资深架构师(阿里P8+)进行主讲。业内首次将分布式架构全部技术串联,并结合大厂真实案例实践讲解,并提供基于百度、58和转转等真实案例的工业级落地代码,将后端架构技术全面系统的展现,帮助同学们从全局视角掌握分布式架构设计方法,成为一个合格的架构师。我们用名师+好课来改变世界,打破业界严重缺乏顶层架构思维且仅靠疯狂堆叠知识点常见作法,初心不变,让每个人持续提升职业能力!阶段一:核心基础组件源码转载 2020-06-23 14:44:21 · 752 阅读 · 2 评论 -
奈学教育《Java资深研发工程师》课程大纲
课程从Java核心基础知识入手,深入JDK、JVM底层源码实现,以及对各种开源框架的优雅设计剖析,为学员打下坚实的基础,让源码学习和底层原理梳理变得更加的简单、清晰、有效。通过结合企业级真实项目案例,融合核心技术知识点与框架级设计思想,进一步夯实核心技术能力的理解和应用。让学员面对企业变化多样的需求,和承担更有挑战性的工作。第一阶段:Java语言核心特性第一阶段:Java语言核心特性第一单元掌握Java语言核心特性玩转反射在框架设计中的应用反射实战-应用场景和总结第二单元掌握Java语言原创 2020-06-23 12:03:05 · 484 阅读 · 0 评论 -
奈学教育《P7架构师》课程大纲(第一阶段)
阶段一:核心基础组件源码深入剖析篇第一单元 掌握RPC核心原理 1.RPC核心原理剖析2.RPC核心知识剖析第二单元 掌握RPC具体开源项目原理与实践RPC核心知识剖析Dubbo深度讲解第三单元 掌握RocketMQ的原理与应用消息队列设计思考消息队列选型场景与方案基于RocketMQ二次开发改造第四单元 掌握配置中心的选型与应用基于RocketMQ二次开发改造配置中心在分布式架构中的作用开源配置中心产品选型对比ctrip Apollo深入原理剖析第五单元 掌握注册中心的原原创 2020-06-22 16:46:47 · 740 阅读 · 0 评论 -
奈学教育《百万架构师》课程大纲(1)
第一阶段:基础架构设计与实践之道篇第一单元通过架构演进掌握架构设计核心思维模式智能互联网之总体架构设计(上)第二单元通过架构演进掌握架构设计核心思维模式智能互联网之总体架构设计(下)第三单元掌握高可用架构设计基本原则智能互联网之核心技术实践篇(上)第四单元掌握核心技术之分布式资源哲学本质和思维智能互联网之核心技术实践篇(中)第五单元掌握网关/分布式锁的哲学本质和场景Balance案例(一)企业级分布式组件案例第六单元掌握高并发下架构设计的BASE理论智能互联网之核心技术.原创 2020-06-18 17:31:22 · 562 阅读 · 0 评论 -
江帅帅:精通 Spring Boot 系列 06
Spring Boot 文件的上传下载说真的,在 Spring Boot 实现文件下载,真的是方便到让我颤抖。Java 中实现文件上传可以用两个组件:CommonMultipartResolver 和 StandardServletMultipartResolver。Spring Boot 在 web 模块中集成了 Spring MVC ,文件上传这块儿的支持是可以通过即插即用的 MultipartResolver 实现类:CommonMultipartResolver。如果用它,则需要使用 commo转载 2020-06-17 18:35:17 · 72 阅读 · 0 评论 -
江帅帅:精通 Spring Boot 系列 05
Spring Boot 处理 JSON 数据JSON 是目前主流的前后端数据传输方式,当 Controller 中返回的是一个 Java 对象或 List 集合时,Spring Boot 将自动把它转换成 JSON 数据。Spring Boot 中内置了 JSON 解析功能,当你在项目中,添加了 spring-boot-starter-web 模块之后,即可看到默认包含 Jackson 解析器,也可以换成 Fastjson 等其他解析器。编辑 Book 类public class Book {转载 2020-06-17 17:32:38 · 76 阅读 · 0 评论 -
分布式柔性事务的TCC方案
起源 -TCC概念由Pat Helland于2007年发表的一篇名为《Life beyond Distributed Transactions:an Apostate’s Opinion》的论文提出, 在该论文中,TCC还是以Tentative-Confirmation-Cancellation命名。正式以Try-Confirm-Cancel作为名称的是Atomikos公司,并且还注册了TCC商标。国内最早可查引进TCC概念,应是阿里程立2008年在 软件开发2.0大会 上分享主题《大规..原创 2020-06-16 17:52:49 · 145 阅读 · 0 评论 -
江帅帅:精通 Spring Boot 系列 04
Web 开发的支持使用 Spring Boot 实现 Web 开发更加便捷了,因为直接依赖 spring-boot-starter-web 模块即可支持 Web 开发,此模块预定义了 Web 开发中常用的依赖包,还有内嵌的 Tomcat 作为默认 Web 容器。Thymeleaf 模板引擎目前,多数企业级应用开发中都支持前后端分离,但还有少数离不开视图层技术,Spring Boot 提供了很多模板引擎来支持视图层技术,比如 Thymeleaf、Freemarker、Velocity。Thym.转载 2020-06-16 17:11:50 · 110 阅读 · 0 评论 -
江帅帅:精通 Spring Boot 系列 03
关闭指定的自动配置通过上面的 @EnableAutoConfiguration 注解就能根据指定的依赖,自动进行配置。但如果你想关闭某一项自动配置,就需要使用 @SpringBootApplication 下的 exclude 参数来设置。比如,我想关闭 DataSource,代码具体如下:1@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})2. 自定义启动 banner能满足企业定制 logo 或项目启动图.转载 2020-06-16 16:26:19 · 200 阅读 · 0 评论 -
江帅帅:精通 Spring Boot 系列 02
1 @SpringBootApplication 注解Spring Boot 的启动类,也就是入口类,需要使用 @SpringBootApplication 注解来标注。在启动类中,我们的 main 方法就是 Java 应用程序的入口方法。@SpringBootApplication 是一个组合注解,具体源码如下:其中,比较重要的三个注解是:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。2 @SpringBoo.转载 2020-06-15 19:44:58 · 93 阅读 · 0 评论 -
江帅帅:精通 Spring Boot 系列 01
1、Spring Boot 概述Spring 框架,作为一个非常优秀的轻量级容器,在企业级项目开发中非常受欢迎,但它在使用期间需要整合众多第三方资源,都会导致配置过于臃肿,这也是令大家非常头疼的问题。Spring Boot 的出现,就是为了让大家更方便去使用 Spring 框架进行开发,它基于“约定优于配置(COC)”的设计理念,它实现了自动化配置解决方案,包括自动配置第三方资源,从而简化了 Spring 应用的创建、运行、调试、部署等方便的操作,让开发者更专注在应用业务的实现上。其实,Spring.转载 2020-06-15 18:42:11 · 91 阅读 · 0 评论 -
大中台模式下如何构建复杂业务核心状态机组件
大中台战略下,中台将公司业务的公共能力下沉,并采用更加合理、可复用的架构和技术来实现这些基础能力。在电商行业内,将面临货物的采购、商品上架、交易发生、订单状态变化、客服介入等大量状态维护。每个状态之间具有很强的逻辑关联关系,比如:退款操作在发货前和发货后将是完全不同的流程,如图1订单退款流程。图1 退款流程图由此可见,对于复杂状态的管理是一个业务依赖,需求多变的场景。在公司初创期,可以采用硬编码方式,对于每一个操作进行状态判断,每一步操作定制一套逻辑链路。随着业务的增加,定制化链路显然不优雅,大量流转载 2020-06-12 17:32:40 · 135 阅读 · 0 评论 -
五分钟学会Elasticsearch查询代理设计
Elasticsearch(ES)是一款基于Lucene的开源分布式搜索引擎。由于其稳定、可靠、快速、安装使用方便等优良特性,目前在业界已广泛使用。ES用途主要分两个方向:分布式实时文件存储 以及 分布式实时分析搜索引擎。一、为什么需要查询代理屏蔽复杂的DSL某二手交易平台使用ES,主要用来支持商品、用户等(以下统称文档)的搜索和分析。ES为查询功能提供了基于Json的完整Query DSL,功能非常强大,但同时也略显复杂,学习成本不低。以搜索昵称为化仁的用户为例,DSL大致如下:json {“原创 2020-06-11 18:37:47 · 302 阅读 · 0 评论 -
免费P7架构师直播课!技术人员如何提升职场技能?
新一期学员相聚于奈学线上课堂,这一次,我们一同向P7冲刺!很多工作了3年的程序员习惯了每天机械性的写代码,但是如果一个程序员不能从架构师的角度思考问题,带领团队,整体完成一个复杂系统的架构设计与开发,就永远也不会了解如何做一个优秀的架构师;那么如何突破上述瓶颈?有两个关键点:一是技术够硬,作为技术领导者,具备统筹全局的技术思维;二是具备整体的项目分析能力,并有优秀的沟通能力。作为技术工作者,如何从繁琐的日常工作中实现技能提升?如何规划未来职业发展路线?2020/6/10 20:00,奈学教育倾力打原创 2020-06-10 16:28:31 · 182 阅读 · 0 评论 -
ZooKeeper核心原理及应用场景
为什么会有ZooKeeper我们知道要写一个分布式应用是非常困难的,主要原因就是局部故障。一个消息通过网络在两个节点之间传递时,网络如果发生故障,发送方并不知道接收方是否接收到了这个消息。有可能是收到消息以后发生了网络故障,也有可能是没有收到消息,又或者可能接收方的进程死了。发送方唯一的确认方法就是再次连接发送消息,并向他进行询问。这就是局部故障:根本不知道操作是否失败。因此,大部分分布式应用需要一个主控、协调控制器来管理物理分布的子进程。所以大部分应用需要开发私有的协调程序,协调程序的反复编写浪费时间,原创 2020-06-09 16:07:23 · 128 阅读 · 0 评论 -
IT自由职业者是怎么样的感受和体验
“很多人可能对自由职业感兴趣,自由职业在欧美国家比较流行,韩国也越来越多的人开始自由职业方式办公,可能是因为文化观念的不同,欧美国家对各种各样的生活方式都会包容性更强一些,当然中国这方面在大城市也越来越好,所以当我们自由职业的时候,我们只是在体验不同的生活方式。这次我会毫无保留的把我的一些体验分享给大家。希望能给大家一些启发!"为什么从事自由职业?很多人想要自由职业是因为我们可以自由的安排时间,不受公司的规则约束,甚至有一些小伙伴认为自由职业就可以想去哪里就去哪里玩,全世界各种旅游,睡到自然醒,不用转载 2020-06-09 15:11:42 · 150 阅读 · 0 评论 -
系统梳理主流定时器算法实现的差异以及应用
这一篇文章系统的梳理主流定时器算法实现的差异以及应用地方。定时器介绍程序里的定时器主要实现的功能是在未来的某个时间点执行相应的逻辑。在定时器模型中,一般有如下几个定义。interval:间隔时间,即定时器需要在interval时间后执行StartTimer:添加一个定时器任务StopTimer:结束一个定时器任务PerTickBookkeeping: 检查定时器系统中,是否有定时器实例已经到期,相当于定义了最小时间粒度。常见的实现方法有如下几种:链表排序链表最小堆时间轮接下来我们原创 2020-06-08 18:12:32 · 212 阅读 · 0 评论 -
微服务架构中分布式事务实现方案怎样何取舍
提起微服务架构,不可避免的两个话题就是服务治理和分布式事务。数据库和业务模块的垂直拆分为我们带来了系统性能、稳定性和开发效率的提升的同时也引入了一些更复杂的问题,例如在数据一致性问题上,我们不再能够依赖数据库的本地事务,对于一系列的跨库写入操作,如何保证其原子性,是微服务架构下不得不面对的问题。1 分布式事务解决方案针对分布式系统的特点,基于不同的一致性需求产生了不同的分布式事务解决方案,追求强一致的两阶段提交、追求最终一致性的柔性事务和事务消息等等。各种方案没有绝对的好坏,抛开具体场景我们无法评价,更原创 2020-06-08 16:54:48 · 107 阅读 · 0 评论 -
奈学教你五分钟学会分布式事务
从概念开始我们先从事务的定义开始。事务即一系列读存动作被当作一个执行单元,这些动作要么全成功,要么全失败,执行动作的过程中保证数据的隔离性和一致性。我们抛离数据库这个特定场景,先假设一个数据存储设备,我们定义两个标准操作,一个读一个写。当写操作依赖于读到的数据时,执行的顺序决定了得到的结果。当单线程时,任意读或写操作在这个数据容器上,他必然是符合上述所有的要求的。当多线程的时候,任意读写,实际上就是导致标准的 race condition,大部分情况下我们是不知道执行结果的。对于单核cpu来说,原创 2020-06-06 18:21:31 · 169 阅读 · 0 评论 -
架构师应该具备哪些思维模型?
架构师一直是程序员「羡慕且追求」的高度,今天来说说我(奈学教育CEO:孙玄)眼里优秀的架构师该如何定义。毕竟我也曾经是一名架构师:在开始今天的话题之前我说一个和我前公司P9现在已经是P10的对话。问题是这样的他说公司中间件架构师不熟悉公司业务,很多事落地不了,非常的疑惑。他最近主要任务就是和这些架构师聊天解惑:)接着他说了一个类比的故事大概是这样的,我们(架构师)要建设一条高速公路,来分别看看公路建造者(架构师)和司机(业务研发)的视角。1,建造者 他们选用最好的沙子 水泥 更好的设计图纸和操作流原创 2020-06-06 11:43:07 · 120 阅读 · 0 评论