摘要: 写这个专栏的缘起 之前我写过一篇博客:《朱晔的互联网架构实践心得S2E2:写业务代码最容易掉的10种坑》,引起的关注还是挺多的。后来和极客时间的编辑一拍即合决定以这个为题写一个专栏。其实所谓坑就是容易忽略但是不容易发现的问题,大部分生产事故都是发布、运维相关的配置引起,真正代码中的问题上线后产生问题 阅读全文
posted @ 2020-03-09 17:11 lovecindywang 阅读(7124) 评论(2) 推荐(2) 编辑
摘要: 朱晔和你聊Spring系列S1E11:小测Spring Cloud Kubernetes @ 阿里云K8S 有关Spring Cloud Kubernates(以下简称SCK)详见https://github.com/spring cloud/spring cloud kubernetes,在本文中 阅读全文
posted @ 2019-10-03 19:55 lovecindywang 阅读(1121) 评论(0) 推荐(0) 编辑
摘要: 和朱晔一起复习Java并发(五):并发容器和同步器 本节我们先会来复习一下java.util.concurrent下面的一些并发容器,然后再会来简单看一下各种同步器。 ConcurrentHashMap和ConcurrentSkipListMap的性能 首先,我们来测试一下ConcurrentHas 阅读全文
posted @ 2019-07-21 18:51 lovecindywang 阅读(1128) 评论(1) 推荐(1) 编辑
摘要: 本节我们来研究下并发包中的Atomic类型。 AtomicXXX和XXXAdder以及XXXAccumulator性能测试 先来一把性能测试,对比一下AtomicLong(1.5出来的)、LongAdder(1.8出来的)和LongAccumulator(1.8出来的)用于简单累加的性能。 程序逻辑 阅读全文
posted @ 2019-07-21 09:24 lovecindywang 阅读(830) 评论(0) 推荐(1) 编辑
摘要: 这个专题我发现怎么慢慢演化为性能测试了,遇到任何东西我就忍不住去测一把。本文我们会大概看一下各种锁数据结构的简单用法,顺便也会来比拼一下性能。 各种并发锁 首先,我们定一个抽象基类,用于各种锁测试的一些公共代码: 我们需要使用锁来保护counter和hashMap这2个资源 write字段表示这个线 阅读全文
posted @ 2019-07-20 08:55 lovecindywang 阅读(978) 评论(1) 推荐(1) 编辑
摘要: 和朱晔一起复习Java并发(二):队列 老样子,我们还是从一些例子开始慢慢熟悉各种并发队列。以看小说看故事的心态来学习不会显得那么枯燥而且更容易记忆深刻。 阻塞队列的等待? 阻塞队列最适合做的事情就是做为生产消费者的中间存储,以抵抗生产者消费者速率不匹配的问题,不但是在速率不匹配的时候能够有地方暂存 阅读全文
posted @ 2019-07-17 20:48 lovecindywang 阅读(747) 评论(0) 推荐(1) 编辑
摘要: 和我之前的Spring系列文章一样,我们会以做一些Demo做实验的方式来复习一些知识点。 本文我们先从Java并发中最最常用的线程池开始。 从一个线程池实验开始 首先我们写一个方法来每秒一次定时输出线程池的基本信息: 然后,我们写一个方法来定时提交任务到线程池: 可以看到: 一共提交20个任务 每秒 阅读全文
posted @ 2019-07-13 21:10 lovecindywang 阅读(1186) 评论(0) 推荐(1) 编辑
摘要: 本文我们主要是想测试和研究几点: 基于Netty写的最简单的转发HTTP请求的程序,四层和七层性能的差异 三种代理线程模型性能的差异,下文会详细解释三种线程模型 池和非池化ByteBuffer性能的差异 本文测试使用的代码在: https://github.com/JosephZhu1983/pro 阅读全文
posted @ 2019-07-01 18:10 lovecindywang 阅读(2770) 评论(0) 推荐(1) 编辑
摘要: 前言 程序开发毕竟还不是搬砖这种无脑体力劳动,需要事先有标准,有架构,有设计,绝对不是新公司今天创立,明天就可以开始编码的。其实很多公司在起步的时候没有财力和资源建设独立的基础架构或平台架构部门,甚至运维团队都没有,但是这不妨碍我们心中有一个蓝图知道努力的方向,本文我们就简单聊聊平台架构相关的工作内 阅读全文
posted @ 2019-05-28 23:07 lovecindywang 阅读(3066) 评论(2) 推荐(2) 编辑
摘要: 朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招 概览 标题中的高并发架构设计是指设计一套比较合适的架构来应对请求、并发量很大的系统,使系统的稳定性、响应时间符合预期并且能在极端的情况下自动调整为相对合理的服务水平。一般而言我们很难用通用的架构设计的手段来解决所有问题,在处理高并发架构的 阅读全文
posted @ 2019-05-10 20:01 lovecindywang 阅读(1627) 评论(0) 推荐(1) 编辑
摘要: 上周运维反馈线上程序出现了OOM,程序日志中的输出为 看线程名称应该是tomcat的nio工作线程,线程在处理程序的时候因为无法在堆中分配更多内存出现了OOM,幸好JVM启动参数配置了 XX:+HeapDumpOnOutOfMemoryError,使用MAT打开拿到的hprof文件进行分析。 第一步 阅读全文
posted @ 2019-05-01 20:05 lovecindywang 阅读(6562) 评论(0) 推荐(4) 编辑
摘要: Web API设计其实是一个挺重要的设计话题,许多公司都会有公司层面的Web API设计规范,几乎所有的项目在详细设计阶段都会进行API设计,项目开发后都会有一份API文档供测试和联调。本文尝试根据自己的理解总结一下目前常见的四种API设计风格以及设计考虑点。 RPC 这是最常见的方式,RPC说的是 阅读全文
posted @ 2019-02-15 15:05 lovecindywang 阅读(2087) 评论(3) 推荐(6) 编辑
摘要: 十几年前就有一些公司开始践行服务拆分以及SOA,六年前有了微服务的概念,于是大家开始思考SOA和微服务的关系和区别。最近三年Spring Cloud的大火把微服务的实践推到了高潮,而近两年K8S在容器编排的地位确定之后大家又开始实践起以K8S为核心的云原生思想和微服务的结合如何去落地,2018年又多 阅读全文
posted @ 2019-02-09 21:27 lovecindywang 阅读(3709) 评论(8) 推荐(9) 编辑
摘要: Kubernetes(k8s)是一款开源的优秀的容器编排调度系统,其本身也是一款分布式应用程序。虽然本系列文章讨论的是互联网架构,但是k8s的一些设计理念非常值得深思和借鉴,本人并非运维专家,本文尝试从自己看到的一些k8s的架构理念结合自己的理解来分析 k8s在稳定性、简单、可扩展性三个方面做的一些 阅读全文
posted @ 2019-01-24 21:21 lovecindywang 阅读(1138) 评论(0) 推荐(1) 编辑
摘要: 我承认,本文的标题有一点标题党,特别是写业务代码,大家因为没有足够重视一些细节最容易调的坑(侧重Java,当然,本文说的这些点很多是不限制于语言的)。 1、客户端的使用 我们在使用Redis、ElasticSearch、RabbitMQ、Mongodb等中间件或存储的时候肯定都会使用客户端包来和这些 阅读全文
posted @ 2019-01-12 15:02 lovecindywang 阅读(1294) 评论(1) 推荐(2) 编辑
摘要: 注意,这是我的架构实践心得的第二季的系列文章,第一季有10篇你也可以回顾。 见https://www.cnblogs.com/lovecindywang/category/1296779.html 最近我一直在思考几个问题: 业务代码究竟难不难写? 一直开发业务代码是不是完全学不到东西? 5年+开发 阅读全文
posted @ 2019-01-05 16:02 lovecindywang 阅读(1465) 评论(5) 推荐(3) 编辑
摘要: Spring Security功能多,组件抽象程度高,配置方式多样,导致了Spring Security强大且复杂的特性。Spring Security的学习成本几乎是Spring家族中最高的,Spring Security的精良设计值得我们学习,但是结合实际复杂的业务场景,我们不但需要理解Spri 阅读全文
posted @ 2018-11-02 18:58 lovecindywang 阅读(1973) 评论(1) 推荐(2) 编辑
摘要: 本文我们来梳理一下Spring的那些注解,如下图所示,大概从几方面列出了Spring的一些注解: 如果此图看不清楚也没事,请运行下面的代码输出所有的结果。 Spring目前的趋势是使用注解结合Java代码而不是配置来定义行为、属性、功能、规则和扩展点,因此梳理注解也是梳理Spring功能点的很好的方 阅读全文
posted @ 2018-10-24 23:03 lovecindywang 阅读(2464) 评论(1) 推荐(3) 编辑
摘要: 本文会以一个简单而完整的业务来阐述Spring Cloud Finchley.RELEASE版本常用组件的使用。如下图所示,本文会覆盖的组件有: 1. Spring Cloud Netflix Zuul网关服务器 2. Spring Cloud Netflix Eureka发现服务器 3. Spri 阅读全文
posted @ 2018-10-12 11:51 lovecindywang 阅读(1412) 评论(6) 推荐(7) 编辑
摘要: "阅读PDF版本" 本文会来看一下Spring Boot Actuator提供给我们的监控端点Endpoint、健康检查Health和打点指标Metrics等所谓的Production ready(生产环境必要的一些)功能。 监控端点 我们先来新建一个模块: 引入了必要的actuator和web启动 阅读全文
posted @ 2018-10-08 22:17 lovecindywang 阅读(861) 评论(0) 推荐(1) 编辑
摘要: "阅读PDF版本" 标题有点标题党了,这里说的容易犯错不是Spring AOP的错,是指使用的时候容易犯错。本文会以一些例子来展开讨论AOP的使用以及使用过程中容易出错的点。 几句话说清楚AOP 有关必要术语: 1. 切面:Aspect,有的地方也叫做方面。切面=切点+增强,表示我们在什么点切入蛋糕 阅读全文
posted @ 2018-10-07 11:25 lovecindywang 阅读(1438) 评论(0) 推荐(0) 编辑
摘要: "阅读PDF版本" 本文会来做一些应用对比Spring MVC和Spring WebFlux,观察线程模型的区别,然后做一下简单的压力测试。 创建一个传统的Spring MVC应用 先来创建一个新的webflux mvc的模块: 然后在项目里定义一个我们会使用到的POJO: 这里的@Document 阅读全文
posted @ 2018-10-05 13:41 lovecindywang 阅读(1093) 评论(0) 推荐(0) 编辑
摘要: "阅读PDF版本" 本文会以一些例子来展现Spring MVC的常见功能和一些扩展点,然后我们来讨论一下Spring MVC好用不好用。 使用SpringBoot快速开始 基于之前的parent模块,我们来创建一个新的模块: 使用web来启用Spring MVC,使用thymeleaf来启用thym 阅读全文
posted @ 2018-10-02 20:42 lovecindywang 阅读(750) 评论(1) 推荐(1) 编辑
摘要: 标题中的咖啡罐指的是Spring容器,容器里装的当然就是被称作Bean的豆子。本文我们会以一个最基本的例子来熟悉Spring的容器管理和扩展点。 "阅读PDF版本" 为什么要让容器来管理对象? 首先我们来聊聊这个问题,为什么我们要用Spring来管理对象(的生命周期和对象之间的关系)而不是自己new 阅读全文
posted @ 2018-10-01 15:53 lovecindywang 阅读(692) 评论(0) 推荐(0) 编辑
摘要: 朱晔和你聊Spring系列S1E2:SpringBoot并不神秘 【编辑器丢失了所有代码的高亮,建议查看PDF格式文档】 文本我们会一步一步做一个例子来看看SpringBoot的自动配置是如何实现的,然后来看一些SpringBoot留给我们的扩展点。 自己制作一个SpringBoot Starter 阅读全文
posted @ 2018-09-30 16:11 lovecindywang 阅读(1817) 评论(0) 推荐(0) 编辑
摘要: 朱晔和你聊Spring系列S1E1:聊聊Spring家族的几大件 朱晔和你聊Spring系列S1E1:聊聊Spring家族的几大件 【下载本文PDF进行阅读】 Spring家族很庞大,从最早先出现的服务于企业级程序开发的Core、安全方面的Security、到后来的作为各种数据源桥梁的Data、最近 阅读全文
posted @ 2018-09-28 21:14 lovecindywang 阅读(1278) 评论(1) 推荐(4) 编辑
摘要: 朱晔的互联网架构实践心得S1E10:数据的权衡和折腾【系列完】 朱晔的互联网架构实践心得S1E10:数据的权衡和折腾【系列完】 【下载本文PDF进行阅读】 本文站在数据的维度谈一下在架构设计中的一些方案对数据的权衡以及数据流转过程中的折腾这两个事情。最后进行系列文章的总结和之后系列文章写作计划的一些 阅读全文
posted @ 2018-09-25 14:57 lovecindywang 阅读(829) 评论(1) 推荐(1) 编辑
摘要: 朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素 朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素 【下载文本PDF进行阅读】 本文我会来说说我认为架构评审中应该看的一些点,以及我写设计文档的一些心得。助你在架构评审中过五关斩六将,助你写出能让人收藏点赞的设计文档。 阅读全文
posted @ 2018-09-21 21:24 lovecindywang 阅读(2575) 评论(1) 推荐(1) 编辑
摘要: 朱晔的互联网架构实践心得S1E8:三十种架构设计模式(下) 朱晔的互联网架构实践心得S1E8:三十种架构设计模式(下) 【下载本文PDF进行阅读】 接上文,继续剩下的15个模式。 数据管理模式 数据管理模式 16、分片模式:将数据存储区划分为一组水平分区或分片 一直有一个说法就是不到没路可走的时候不 阅读全文
posted @ 2018-09-19 13:38 lovecindywang 阅读(1633) 评论(0) 推荐(2) 编辑
摘要: 朱晔的互联网架构实践心得S1E7:三十种架构设计模式(上) 朱晔的互联网架构实践心得S1E7:三十种架构设计模式(上) 【下载本文PDF进行阅读】 设计模式是前人通过大量的实践总结出来的一些经验总结和最佳实践。在经过多年的软件开发实践之后,回过头来去看23种设计模式你会发现很多平时写代码的套路和OO 阅读全文
posted @ 2018-09-18 17:45 lovecindywang 阅读(5201) 评论(1) 推荐(5) 编辑
摘要: 朱晔的互联网架构实践心得S1E6:给飞机换引擎和安全意识十原则 朱晔的互联网架构实践心得S1E6:给飞机换引擎和安全意识十原则 【下载本文PDF进行阅读】 本文有两个部分,先介绍一下给飞机换引擎这个事情我的一些经验,因为篇幅较短然后介绍一下安全意识方面的一些心得。 给飞行中的飞机换引擎 给飞行中的飞 阅读全文
posted @ 2018-09-17 16:14 lovecindywang 阅读(1356) 评论(0) 推荐(3) 编辑
摘要: 朱晔的互联网架构实践心得S1E5:不断耕耘的基础中间件 朱晔的互联网架构实践心得S1E5:不断耕耘的基础中间件 【下载本文PDF进行阅读】 一般而言中间件和框架的区别是,中间件是独立运行的用于处理某项专门业务的CS程序,会有配套的客户端和服务端,框架虽然也是处理某个专门业务的但是它不是独立程序,是寄 阅读全文
posted @ 2018-09-15 20:25 lovecindywang 阅读(1470) 评论(2) 推荐(5) 编辑
摘要: 朱晔的互联网架构实践心得S1E4:简单好用的监控六兄弟 朱晔的互联网架构实践心得S1E4:简单好用的监控六兄弟 【下载本文PDF进行阅读】 这里所说的六兄弟只指ELK套件(ElasticSearch+Logstash+Kibana)以及TIG套件(Telegraf+InfluxDb+Grafana) 阅读全文
posted @ 2018-09-13 18:10 lovecindywang 阅读(1657) 评论(0) 推荐(1) 编辑
摘要: 朱晔的互联网架构实践心得S1E3:相辅相成的存储五件套 朱晔的互联网架构实践心得S1E3:相辅相成的存储五件套 【下载本文PDF进行阅读】 这里所说的五件套是指关系型数据库、索引型数据库、时序型数据库、文档型数据库和缓存型数据库。 上图显示了一套读写服务搭配这五种类型数据库的例子: 1. 这里只是说 阅读全文
posted @ 2018-09-12 18:01 lovecindywang 阅读(1406) 评论(0) 推荐(0) 编辑
摘要: 朱晔的互联网架构实践心得S1E2:屡试不爽的架构三马车 朱晔的互联网架构实践心得S1E2:屡试不爽的架构三马车 【下载本文PDF进行阅读】 这里所说的三架马车是指微服务、消息队列和定时任务。如下图所示,这里是一个三驾马车共同驱动的一个立体的互联网项目的架构。不管项目是大是小,这个架构模板的形态一旦定 阅读全文
posted @ 2018-09-10 10:07 lovecindywang 阅读(3571) 评论(3) 推荐(11) 编辑
摘要: 朱晔的互联网架构实践心得S1E1:Pilot 朱晔的互联网架构实践心得S1E1:Pilot 最近几年写博客确实写得少了,初出茅庐的时候什么都愿意去写,现在写一点东西之前会反复斟酌是否有价值。工作十几年了,做了N多个互联网系统,业务涉及教育、游戏、电商、O2O、P2P,算是各种类型的互联网系统都摸过, 阅读全文
posted @ 2018-09-09 11:51 lovecindywang 阅读(2465) 评论(0) 推荐(4) 编辑
摘要: 如果你还在苦苦寻找机器学习和深度学习入门资料的话,或许可以看看本文我的一些推荐,这些材料我自己都学过一遍,分享一下点评,希望对你有帮助。注意,本文只是点评这些资源,不提供任何资源的盗版下载,所有资源我本人都是正版获取也不会对外分享。 1 Coursera机器学习 by Andrew Ng ★★★★ 阅读全文
posted @ 2018-04-19 17:09 lovecindywang 阅读(2613) 评论(2) 推荐(1) 编辑
摘要: 假设一个公司发展有以下几个阶段: 0 :创始阶段; 0.5 :有产品但无管理阶段; 1 :经过 1年的发展初步稳定的阶段; 1+ :稳步发展阶段。 0 :创始阶段; 0.5 :有产品但无管理阶段; 1 :经过 1年的发展初步稳定的阶段; 1+ :稳步发展阶段。 上一篇文章中,我们聊了公司在初创阶段, 阅读全文
posted @ 2018-04-13 17:05 lovecindywang 阅读(1945) 评论(5) 推荐(10) 编辑
摘要: CTO 是企业内技术最高负责人,对企业的发展起到至关重要的作用。但随着公司的不断发展,CTO 的工作重心也会不断变化。只有在正确的阶段做正确的事,才能更好地为公司做出贡献。我是空中金融 CTO ,TGO 鲲鹏会上海分会会员。加入空中金融之前,我曾在饿了么、空中网、5173 等互联网公司担任中层技术管 阅读全文
posted @ 2018-04-09 18:39 lovecindywang 阅读(7661) 评论(21) 推荐(35) 编辑
摘要: 技术学习要兼顾深度和广度 夯实技术基础 这么多年来,我面试了很多人。我越发感到「技术基础」非常重要。 很多技术的本质是一样的。技术基础足够好的话,学东西可以非常快。往下到操作系统层面,甚至计算机硬件层面,你会发现,编程语言特性和虚拟机特性不再重要。而技术基础和具体的编程语言没有太大关系,你有良好的技 阅读全文
posted @ 2018-04-09 18:30 lovecindywang 阅读(1533) 评论(3) 推荐(15) 编辑