- 博客(18)
- 资源 (11)
- 收藏
- 关注
原创 互联网后端工程架构全景
经过几十年的发展,在互联网大厂的技术引领下,互联网技术基础设施不断成熟并趋向统一,今天梳理下目前互联网主流技术中间件及后端工程架构全景图(如下图所示)。研发流程项目需求管理是所有大型软件开发项目必备的基础设施。Atlassian公司的JIRA是这个领域成熟的商业软件,国内许多互联网公司都在使用或曾经使用过。它实践了敏捷项目开发的管理理念,几乎所有互联网软件开发都是采用敏捷开发模式。文档协作能提高多人协同工作效率,几乎所有组织都需要。这个领域国内外都有非常成熟的软件和解决方案,比如国外Atlassia
2021-09-08 10:44:37
1304
原创 业务代码分离:规则引擎(BRMS)
痛点做业务开发的程序员经常会因为业务的频繁变动而变更业务代码。每一次的变动都要涉及开发、测试、发版,不仅效率低,而且容易产生Bug。特别是对于复杂度高的业务逻辑(比如电商平台的营销活动规则,风控业务规则等),直接编码业务规则会让代码中充斥着各种IF-ELSE,代码的维护性和扩展性非常差。有没有好的系统设计来将业务逻辑从代码中分离出来,让代码可以变得稳定易维护,且让业务规则可以灵活变更呢?解法解决上述痛点的答案便是业务规则引擎,全称是业务规则管理系统(Business Rule Management S
2021-07-27 07:45:54
1815
原创 服务端主流中间件之Apollo配置中心
配置对于程序而言是必不可少的,它提供我们可以动态修改程序运行能力。引用别人的一句话就是“系统运行时(runtime)飞行姿态的动态调整!”配置分为静态配置和动态配置。静态配置是在程序启动前配好,启动时一次性生效,在程序运行期不会变化的配置。静态配置主要通过配置文件实现,比如.ini文件、.xml文件、.properties文件等。一般程序运行环境、性能参数等会采用静态配置。动态配置是在程序的运...
2020-03-26 16:08:00
1519
原创 JVM性能调优
Java从诞生之初就一直被诟病性能不如C/C++。究其原因,最主要是因为Java程序是运行在JVM虚拟机之上,而C/C++是运行在物理机之上。对于Java程序而言,哪怕是最简单的 HelloWorld 程序都需要先运行一个JVM程序。这意味着要它至少要多出一个类加载程序、字节码解析执行程序以及GC程序等。不过,虽然牺牲了一些运行效率,但是Java通过 JVM 实现了其 “Write Once, R...
2020-03-18 15:53:01
298
原创 一图把握服务端缓存架构设计要领
在程序设计中,缓存是典型的用空间换时间来获得程序性能提升的手段。对互联网服务端架构来说,缓存还是一种应对高并发的有效手段(延伸阅读《高并发架构设计》)。缓存不是简单的KV读写,引入缓存会增加全局系统架构的一致性复杂度,缓存架构设计不到位,反而会带来数据不一致问题。下图是关于服务端缓存设计的核心技术点。何时需要缓存?《高并发架构设计》一文指出当QPS大于50,将达到单机DB性能的极...
2020-03-10 14:54:28
601
原创 技术管理:从IC到Leader
本文内容源自一次技术管理培训。培训讲师叫刘建国,是一位从百度一线工程师成长为优秀技术管理者的管理咨询师。他以亲身经历总结了从工程师转向技术管理遇到的各种困惑、迷茫以及应对之道,为我们指明了一条清晰的技术人的管理之路。在后来实际的管理工作中,我发现这套方法论对指导实践非常有价值,遇到的许多管理问题都能从中找到解决方案。故此,结合自己的实践心得,将那次培训的几个核心要点梳理一下,与大家分享。...
2020-03-04 16:49:28
3444
原创 高并发架构设计
互联网服务相比传统软件的最大的挑战是它需要应对来自网络的无限流量。因此在对互联网应用做架构设计时,高并发是必须考虑的因素。那什么是高并发呢?百度百科的描述如下:高并发(High Concurrency)通常是指通过设计保证系统能够同时并行处理很多请求。通俗来讲,高并发是指在同一个时间点,有很多用户同时的访问同一 API 接口或者 Url 地址。它经常会发生在有大活跃用户量,用户高聚集的业务场...
2020-03-01 15:41:08
1318
原创 高可用架构设计
设计高可用的软件架构,是每个互联网软件开发工程师的追求。尤其对于在线交易系统、在线广告系统而言,服务的可用性会直接影响商业变现。随着互联网技术在工业界的广泛使用,各大互联网公司在各自的业务领域内,沉淀了成熟的高可用架构方案。那么究竟什么是高可用?高可用架构该如何设计呢?度量首先需要了解下什么是可用性以及如何度量可用性。对于一个交互式IT产品,是否可用是看用户能否用该产品完成他的任务。...
2020-02-25 17:07:53
3239
原创 大数据计算引擎
信息技术和互联网技术的发展,带来了全球数据的爆发式增长。超大规模的数据计算问题成为各大科技公司急需解决的世界级难题。2004年谷歌的MapReduce论文给出了一个可行的大数据计算模型,给大数据并行处理带来了巨大的革命性影响。随后大数据计算取得了飞速发展,针对更细化的大数据应用场景,各种优秀的大数据引擎不断涌现,呈现出百花齐放百家争鸣的景象。在国外一些社区,很多人将大数据的计算引擎分成了四代(如下...
2020-02-22 14:35:37
3514
1
原创 大数据平台架构及主流技术栈
互联网和移动互联网技术开启了大规模生产、分享和应用数据的大数据时代。面对如此庞大规模的数据,如何存储?如何计算?各大互联网巨头都进行了探索。Google的三篇论文 GFS(2003),MapReduce(2004),Bigtable(2006)为大数据技术奠定了理论基础。随后,基于这三篇论文的开源实现Hadoop被各个互联网公司广泛使用。在此过程中,无数互联网工程师基于自己的实践,不断完善和丰富H...
2020-02-16 19:37:15
4359
1
原创 数仓架构设计方法论
数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数仓之父比尔·恩门(Bill Inmon)在1991年出版的《Building the Data Warehouse》一书中所提出的定义被广泛接受:数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据...
2020-02-13 20:57:11
1515
原创 内存空间和文件空间的索引设计区别
索引(Index)本质上是一种用空间换时间,提高查找性能的手段。从数据结构的角度看,索引是一种键值(key-value)映射关系表。图书的目录就是一种索引,它的key是章节,value是对应章节所在的页码。在没有索引情况下,想在一个群体中找出个体,需要逐个遍历,其时间复杂度是O(n)。最优解当然是不做任何遍历直接找到个体,时间复杂度是O(1)。但是索引降低查找时间复杂度是以提高空间复杂度为代价...
2020-02-11 16:26:34
761
原创 几道有意思的智力面试题
1、考虑一个双人游戏。游戏在一个圆桌上进行。每个游戏者都有足够多的硬币。他们需要在桌子上轮流放置硬币,每次必需且只能放置一枚硬币,要求硬币完全置于桌面内(不能有一部分悬在桌子外面),并且不能与原来放过的硬币重叠。谁没有地方放置新的硬币,谁就输了。游戏的先行者还是后行者有必胜策略?这种策略是什么?答案:先行者在桌子中心放置一枚硬币,以后的硬币总是放在与后行者刚才放的地方相对称的位置。这样,...
2020-02-05 20:07:37
681
原创 微服务治理之降级&限流&熔断
前言从PC互联网到移动互联网,B/S架构演化为多端/S架构。后端服务SOA模式下的重服务或单服务架构,逐渐按功能模块被切分成微服务架构(延伸阅读《软件工程和架构发展简史》)。微服务架构确实能解决单服务架构的许多顽疾,比如代码维护难、部署不灵活、稳定性不高、无法快速扩展等。但随着微服务模块的与日俱增,它又带来了一些新的问题需要解决。针对这些问题,Spring Cloud提供了一整套微服务实施方案...
2020-02-05 19:38:57
3469
1
原创 从软件工程师到程序员
最近看了优快云上的一片文章,叫《软件工程师的衰落与程序技术员的兴起》。这篇文章对软件工程师和程序员作了比较深刻的分析。文章开篇一段话是这样说的我们真正看到的不是软件工程师或计算机科学家的消亡,而是程序员和技术员的崛起也许你会说软件工程师和程序技术员难道不是一回事吗?前者不过是较正式的表述,后者是偏口语化的名词。其实不然,或许看一下这篇文章引用的英文名词更容易理解:软件工程师——Sof...
2020-02-04 17:32:56
1025
原创 从康威定律看技术管理
前言从单体架构到SOA架构,再到微服务架构,除了软件开发本身的技术驱动外,背后还有管理方法论的推动。这个视角是我担任技术管理职位之后才逐渐意识到的。本文就来分享一下我对系统架构与技术管理的一些思考,其背后的理论基础就是著名的『康威定律』。康威定律缘起1968年,马尔文·康威(Melvin Conway)在其论文《How Do Committees Invent?》阐述了系统设计与...
2020-01-23 19:34:26
754
原创 对Java注解的三层理解
许多程序设计语言都有自己的独门武功,比如C语言可操作内存空间,PHP代码无需编译,Golang有协程。Java自然也有,比如 "Write Once,Run Anywhere" 能力、纯OO特性、以及(本文的主题)注解。现代Java程序员真的是太喜欢注解了,以至于在使用其他编程语言时,都忍受不了无法使用注解。对啊,为啥其他语言大多都不支持注解呢?或许这个问题该反过来思考:为啥Java会有注解这种神...
2020-01-21 09:43:05
416
webpy-0.36.tar.gz
2012-04-25
HTM转CHM格式转换器(无限制)
2012-02-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人