自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 共识协议:两阶段提交

共识协议:两阶段提交问题        日常我们都有银行转账的经历,一个用户A从银行X的账户上转了100元到用户B银行Y的账户。如果单独分析用户A和用户B在各自银行账户的金额变化,它们就是独立的本地事务,但是由于这个场景是跨多个数据源,所以它是一个分布式事务场景,而分布式事务代表的是全局事务。        如上图所示,用户A在银行X账户

2021-10-07 16:53:16 492

原创 CAP小结

CAP小结        本文是对CAP原理的简介、证明以及思考。其中理论证明部分主要来自于对Gilbert与Lynch的两篇论文(《Brewer’s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services》 和 《Perspectives on the CAP Theorem》)的理解。CAP原理简介

2021-09-24 15:34:26 342

原创 MongoDB-第五章-索引

索引        索引如同字典的目录一样,是用来加速查询的。具有正确索引的查询会比没有索引的查询快几个数量级,当随着数据量级变大时,愈发明显。索引简介        首先我们准备一个集合author_test_collection,集合中的文档主要包括了,以下几个字段:name和age,其中name的类型是字符串,而age是整型。记住,任

2021-09-13 16:36:13 508

原创 MongoDB-第四章-查询

查询        对MongoDB进行新增、修改和删除后,最主要的功能就是对数据(集合)进行查询,MongoDB支持丰富的查询功能。查询简介        使用find命令可以查询集合中的文档,并返回符合要求的文档子集。查询命令的第一个参数是查询的模式,第二个参数是指定返回的键。查询的模式有些类似JPA中的查询模式,只需要表述需要的模式就行,

2021-09-07 16:53:58 634

原创 FreeMarker介绍-使用入门

使用入门        FreeMarker同Velocity一样,都属于模板引擎技术,在SpringBoot微服务中,使用它们做页面模板渲染。由于公司技术栈的原因,笔者常用的是Velocity模板,但是在新的SpringBoot版本中,Velocity的starter已经不再推荐,转为FreeMarker。Velocity万年不更新,但是一样老的FreeMarker更新还是比较频繁的  &nbsp

2021-09-03 11:56:04 639

原创 拜占庭将军问题

拜占庭将军问题        《拜占庭将军问题》来自于对Leslie Lamport一篇在1982年发表的论文,可以通过检索the-byzantine-generals-problem来下载阅读。这篇论文的主旨是阐述了一个将军和若干中尉协作进攻一个城池的问题,通过假设和分析问题场景中的多种情况,比如:存在叛徒和信息传递丢失的问题,来设计一组算法,使得忠诚的将军(或中尉)有统一的行动计划,并将这组算法应用到可靠计算机系统的建设中

2021-09-02 11:43:23 485

原创 MongoDB-第三章-创建、更新和删除文档

创建、更新和删除文档    使用一款数据库,最主要的就是对其(关系或集合)进行增删改查,接下来就介绍如何在MongoDB中进行数据的新增、删除和修改,以及这些操作在MongoDB中的特点。插入文档    通过使用insert命令可以向一个集合中插入新的文档,对于新增的文档,MongoDB客户端会生成一个_id。> item = {"name":"murdock", "age":18}> db.foo.ins

2021-09-01 11:36:50 352

原创 MongoDB-第二章-简介

简介    MongoDB是一种文档类型的数据库,具备了扩展性强的特性,支持诸如:辅助索引、范围查询以及排序等功能。    在主要功能基础上,还支持一些高阶特性,比如:内置的MapReduce支持和地理空间索引的支持。丰富的数据模型    MongoDB是面向文档的数据库,放弃关系模型的主要原因就是为了获得更加方便的扩展性。在关系数据库中的 行 在MongoDB中是灵活的 文档,一

2021-08-31 11:39:11 101

原创 互联网产品经理的未来

五年后,产品经理真的会消失?这篇文章之前没有看过,但是我对它的判断基本很早就做出了       产品经理这个行业也就在未来的5年左右会慢慢的淡出大家的视线成为历史,这个是建立在以下几个判断。下面的内容基本可以等同于对大多数产品经理的判断,如果你是产品经理,没错,说的就是你。从业起点低       《人人都是产品经理》表示谁都可以转岗做产品,一般转岗去做产品.

2021-08-29 12:23:40 367

原创 MongoDB-第一章-入门

入门    文档是MongoDB的基本单元,类似于关系数据库中的行,而集合是文档的聚合,因此集合类似关系数据库中的表,在一个集合中可以装在不同模式的文档。每个文档都会有一个_id的主键。    一个MongoDB实例可以建立多个数据库,每个数据库都可以创建多个集合,而MongoDB通过基于JavaScript的shell来管理数据库。文档    文档是MongoDB的核心概念,在M

2021-08-28 13:19:12 138

原创 算法和数据

学过计算机的都知道程序设计就是算法和数据结构,但这里的数据不是数据结构,而是现实世界结构化的数据存储       突然想到之前贵州的一个会议,马老师和李彦宏关于数据和算法之争,马老师说数据为王,而李彦宏认为算法更重要。笔者感觉李彦宏在说一个自己都不相信的假话,目的是掩饰已经衰落的百度形象。       数据是对现实世界结构化的理解,如同为未来囤积的矿藏,它不会随.

2021-08-27 11:00:03 346

原创 领域驱动设计简介

前言       软件开发是困难的,但这是软件本质的一部分。软件开发需要理解事物的本质,通过业务驱动,目的是达成各方的一致认知。领域驱动设计能够便于我们建立起正确的概念模型。       领域驱动设计同时提供了战略和战术的建模工具,来帮助使用者设计和实现高价值的软件。借助领域驱动设计,使用者可以在当今竞争激烈的商业环境中持续的交付最有效的软件设计与实现。&nbsp

2021-08-27 10:58:35 664

原创 Logger级别定义

       使用Slf4j或者诸多日志框架时,可以看到不少日志级别,我们常用INFO和ERROR,对其他级别没有过多的使用,但是不意味着它们没有价值,存在即合理,我们需要正确的使用日志级别来构建应用,而正确的使用来自于一致的理解。       Fatal/Critical级别:应用或者系统上的失败需要立即被关注,这种情况下需要立即叫醒系统管理员。因为我们希望系统管理

2021-08-26 12:04:08 497

原创 Maven仓库切换

起因       Java开发者在工作中,往往需要切换自己的开发环境,其中就包括了Maven仓库。由于建立一个私有仓库不是难事,所以一旦出现多个仓库需要切换,就非常麻烦,因此有一个便捷的切换方式会好很多。       我们的仓库配置一般都在~/.m2/settings.xml,默认的Maven会读取这个配置,我们就写一个脚本和配置,来让它能进行切换。以下在Mac

2021-08-26 12:02:42 1635

原创 更新到OpenJDK

       很早以前Mac一直装的OracleJDK,最近265的小版本更新了,又安装了。突然想到应该切换到OpenJDK上来,就试了试。其实没啥难的,可能有一些工具,比如:jmc没有带上,只能怪它太肥了,如果要用的话,需要自己单独去下载,Oracle也开源了它。删除OracleJDK       删除/Library/Java/JavaVirtualMachin

2021-08-25 11:37:36 669

原创 使用JDB进行调试

       在预发环境下进行debug时,时常因为工具和环境的限制,导致debug体验非常差,那么有什么方法能够简化我们进行debug的体验吗?JDB就是一种。       JDB是 The Java Debugger 的简称,它可以用来debug一个Java程序,同时它是 JPDA 的一个参考实现,只是这个实现是基于命令行的。提到命令行,有些同学心里就犯嘀咕了,离

2021-08-24 11:13:21 3165 1

原创 使用JMH做Java微基准测试

       在使用Java编程过程中,我们对于一些代码调用的细节有多种编写方式,但是不确定它们性能时,往往采用重复多次计数的方式来解决。但是随着JVM不断的进化,随着代码执行次数的增加,JVM会不断的进行编译优化,使得重复多少次才能够得到一个稳定的测试结果变得让人疑惑,这时候有经验的同学就会在测试执行前先循环上万次并注释为预热。       没错!这样做确实可以获得

2021-08-23 12:06:34 358

原创 如何更好的做单元测试(下)

SpringBoot环境下的测试方法以下例子可以在spring-boot-test中找到。       Spring框架实际上是依靠SpringBoot完成了续命,由它焕发了第二春,打开了一个全新的战场。在今天微服务大放异彩的环境下,针对SpringBoot的测试也会有所不同。       SpringBoot实际是用来启动你的应用,所以它会有配置以及

2021-08-22 11:16:13 170

原创 如何更好的做单元测试(上)

前言引言“I’m not a great programmer; I’m just a good programmer with great habits.”– Kent Beck       Java单元测试框架在业界非常多,以JUnit为事实上的标准,而JUnit只是解决了单元测试的基本骨干,而对于Mock的支持却没有。而同样,在Mock方面,Java也有很多开源的选择,诸如JMock、EasyMock和Mockito,而

2021-08-22 11:14:14 172

原创 Java类型检测与类加载

       Java提供了参数的动态检验,也就是在执行期检测参数是否合法。但是部分的检测还是在编译器的协助下完成的,而这一步要早于真正执行它。Java编译器会开启这种静态检测机制,会使用一组类型检测规则来检测Java字节码,检测这些字节码是否符合规则,如果不符合那么将会被拒绝。这里不讨论类型检测的做法,而是说明类型检测是早于执行的,而这一步将会诱发类加载过程,而这个类加载的顺序将会 颠覆 你对Java类加载的认知。场景一:方法接受参数

2021-08-21 10:51:11 563

原创 Class.forName和ClassLoader.loadClass

这里讨论的Class.forName是Class类的方法public static Class<?> forName(String className) throws ClassNotFoundException这里讨论的ClassLoader.loadClass是ClassLoader类的方法public Class<?> loadClass(String name) throws ClassNotFoundExceptionClassLoader在加载类时的概念区分&n.

2021-08-21 10:50:07 626

翻译 系统、当前与线程上下文类加载器

来自:http://www.javaworld.com/article/2077344/core-java/find-a-way-out-of-the-classloader-maze.html问题:应该在什么时候使用线程上下文加载器?回答:       虽然不经常被问起这个问题,但是这个问题却很难给予一个正确的答案。一般来说,这个问题都来自于框架编程过程中需要动态的加载资源。一般来说,加载一个资源的时候,你会有至少有三个Cla.

2021-08-21 10:46:04 289

原创 Service Fabric - 与K8S的比较

       Service Fabric 这个分布式平台让人很自然的联想到了K8S,那么它们能够对比吗?答案是肯定的,而且 Service Fabric 的范畴更大。       在reddit.com上有人这么形容:Service Fabric is really about microservices and managing a distributed i

2021-08-20 17:03:57 619

原创 Service Fabric - 生命周期与运行状况

开发、部署和测试       在开发阶段,服务开发人员使用 Reliable Actors 或 Reliable Services 编程模型开发不同类型的服务。服务开发人员以声明的方式描述包含一个或多个代码、配置和数据包的服务清单文件中的开发服务类型,随后,应用程序开发人员构建使用不同服务类型的应用程序。       应用程序开发人员以声明的方式,通过引用构成服务的

2021-08-20 16:53:27 160

原创 Service Fabric - 编程模型与服务

       在之前的例子中演示了来宾可执行文件、服务的编程模型,可以看到在 Service Fabric 编写服务时可以获取到资源、部署信息,以及能够完成健康和监控信息的汇报。除了无状态服务, Service Fabric 还着重介绍了有状态服务,服务部署后我们还可以对服务进行扩缩容以保证服务是处于最优的运行状态。       Service Fabric 提供了多

2021-08-20 16:51:09 337

原创 Service Fabric - 部署结构

       在部署环节中,我们创建了ApplicationManifest.xml用来描述应用,ServiceManifest.xml用来描述服务,这些究竟指的什么,下面会详细的介绍。部署结构       每个 Service Fabric 应用都是需要固定的部署结构,其中的资源结构如下图所示:     &

2021-08-20 16:47:41 192

原创 Service Fabric - 深入实践

       之前SpringBoot的例子是展示编程模型中的来宾文件模式,下面将会使用sf-services来构造基于 Service Fabric API的应用。在介绍之前首先说明一下,目前 Service Fabric 对SpringBoot应用支持是存在问题的,客户端应用在生成代理时,会走到 Service Fabric 构造的classloader中,而它进行写类文件,在处理SpringBoot这种Jar-in-Jar的场景就存

2021-08-19 15:30:18 407

原创 Service Fabric - 基本概念

       在一个简单的示例演示之后,接下来我们介绍 Service Fabric 的基本概念,它首先是一个分布式平台,打包、部署和伸缩微服务应用,以支持Cloud-Native来设计的,能够从本机服务成长到包含数千节点的大规模服务,并且为应用提供了全面的运行时和生命周期管理。下面是 Service Fabric 的架构图:       从虚拟机移动到容器可能

2021-08-19 15:25:55 1786

原创 Service Fabric - 快速一瞥

       Service Fabric 在2018年3月19日的这一天,微软选择将其开源,微软称呼它为分布式系统平台,我们接下来看看这个分布式系统平台能做些什么。       首先 Service Fabric 定位是一个“分布式系统平台”,意思就是说,它是用来写其他的分布式系统的,比如可以很容易写个Zookeeper、分布式Redis或者分布式数据库,更重要的是

2021-08-19 15:21:16 273

原创 Java微服务开发指南-番外篇:使用MicroK8s

    在单节点的Kubernetes搭建过程中,一般会采用MiniKube,可是MiniKube会要求宿主机安装虚拟机,在其上完成部署,这个过程会比较麻烦,有没有一种方式,能够提供一种不依赖虚拟机,但是能和宿主机相对隔离的方案来搭建单节点的Kubernetes呢?答案是有的,Canonical 提供了MicroK8s,可以用它来完成不依赖虚拟机的搭建,同时它提供了非常好的安装体验。    MicroK8s的描述是 “Zero

2021-08-18 12:37:36 439

翻译 Java微服务开发指南-下一步该了解什么?

    我们在这本小册子里面介绍了非常多的知识,但是它远远不够涵盖一切!我们需要知道,这只是冰山一角,有非常多的微服务所涉及到的领域在本书中没有探讨。在最后这个章节,我们将会简要的介绍一些你必须了解的概念,并将这些联系留给读者进行深入研究。配置    配置(Configuration)是分布式系统中非常重要的部分,而在微服务架构中变得愈发重要和困难。我们需要在配置和不可变递交(Immutable delivery)之间寻求平

2021-08-18 12:35:56 186

翻译 Java微服务开发指南-集群管理、失败转移和负载均衡的实践(下)

容忍失败(Fault Tolerance)    构建类似微服务架构这样的复杂分布式系统,需要在心中有一个重要的假设:没有什么不会坏的(things will fail)。我们能花大量的精力来防止失败,但是就算这样,我们也不能预防所有的案例,因此面对这个必然的假设唯一的解法就是:我们面向失败进行设计,换一句话说就是,如何做到在一个充满变数的不稳定环境中幸存。figure out how to survive in an environment where the

2021-08-18 12:33:20 446

翻译 Java微服务开发指南-集群管理、失败转移和负载均衡的实践(上)

    在前一章节中,我们快速的介绍了集群管理、Linux容器,接下来让我们使用这些技术来解决微服务的伸缩性问题。作为参考,我们使用的微服务工程来自于第二、第三和第四章节(Spring Boot、Dropwizard和WildFly Swarm)中的内容,接下来的步骤都适合上述三款框架。开始    我们需要将微服务打包成为Docker镜像,最终将其部署到Kubernetes,首先进入到项目工程hola-springboot,

2021-08-18 12:30:42 237

翻译 Java微服务开发指南-使用Docker和Kubernetes构建可伸缩的微服务

    从现在开始,我们将从更高的维度讨论微服务,涵盖了组织敏捷性、设计和依赖的思考、领域驱动设计以及Promise理论。当我们深入使用之前介绍的三个流行的微服务框架:Spring Boot、Dropwizard和WildFly Swarm,我们能够使用它们开箱即用的能力去构建一个暴露或者消费REST服务的应用,能够使用外部环境对应用进行配置,可以打包成一个可执行的jar,同时提供Metrics信息,但这些都是围绕着一个微服务实例。当我们需要管理微服务之间的依赖、集群

2021-08-17 11:16:38 447

翻译 Java微服务开发指南-使用WildFly Swarm构建微服务

    我们最后介绍一个新的微服务框架,它构建在支持分层且可靠的JavaEE技术栈上(使用JBoss WildFly 应用服务器),WildFly Swarm是一个完全兼容WildFly应用服务器,它基于可重用的组件,这里称为元件(fractions)来组成微服务应用。组装这些元件和你使用maven或者gradle去添加依赖一样简单,你只需要声明元件,WildFly Swarm将会帮助你完成后续的工作。    应用服务器和Ja

2021-08-17 11:13:00 481

翻译 Java微服务开发指南-使用Dropwizard构建微服务

    Dropwizard的历史要早于Spring Boot和WildFly Swarm,它最早是在2011.12发布的v0.1.0版本,在本文编写的过程中,它已经发布了v0.9.2版本,而v1.0.0版本也在准备中了。Dropwizard是Coda Hale在Yammer公司时创立的,它旨在提升公司分布式系统的架构(现在叫:微服务)。虽然它最早被用来构建REST Web 服务,而现在它具备了越来越多的功能,但是它的目标始终是作为轻量化、为生产环境准备且容易使用的w

2021-08-17 11:06:40 975

翻译 Java微服务开发指南-使用Spring Boot构建微服务

    Spring Boot是一个广泛用来构建Java微服务的框架,它基于Spring依赖注入框架来进行工作。Spring Boot允许开发人员使用更少的配置来构建微服务,同时框架本身能够尽可能的减少开发人员的冲突,它和我们后面要介绍的两个框架类似,它通过以下几个方面帮助开发人员:自动化配置,一般情况下都有默认配置提供一组流行的starter依赖,方便开发人员使用简化应用打包提升应用运行时的内省性(例如:Metrics与环境信息)简化的配置&nbsp

2021-08-16 16:13:50 530

翻译 Java微服务开发指南-Java环境下的微服务

本文涉及的内容,能让你学到什么?    本书适用于开发微服务的Java开发人员和架构师。我们在开始介绍微服务架构前,先讲述一些抽象的基本概念。不幸的是,使用新技术并不能神奇地解决分布式系统问题。但是我们通过一些做的很好的公司,它们是如何使用微服务来进行构建的,包括文化、组织结构和市场压力。然后我们深入了解几个Java微服务框架,附带的源代码反馈可以在GitHub上找到。我们会讨论有关部署、集群、故障转移以及Docker和Kubernetes在这些领域是如何解决这些问

2021-08-16 12:22:44 1159

翻译 Java微服务开发指南-简介

针对目前Java的微服务简要介绍。主要内容是如何构建:可伸缩适应性复杂性的系统,并且用它来应对日益复杂的市场挑战。看看微服务如何解决这个难题:原书使用了Red Hat Container Development Kit(CDK)来完成对k8s的使用,译者认为不应该依赖特定提供商的工具,因此后续章节的例子均使用k8s原生的工具完成,可以保证在ubuntu自有环境上的正常使用k8s使用的是本机部署的minikube,因此在第五章专门增加了minikube的安装方式在ubuntu下的

2021-08-16 12:11:11 170

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除