Java程序员如何学习架构

怎样从一位程序员进阶成为一名合格的架构师?这是很多刚刚成为程序员和已经工作三五年的程序员会经常问道的问题。

先来看看大型网站的架构演化路线

初始阶段

应用和数据服务器分离

这一步主要还是把数据库服务器独立出去。

使用缓存

本地缓存和分布式缓存,这一步主要还是使用本地缓存的多点,一般不会一下子就用到分布式缓存,当然有些系统会直接使用分布式缓存。将一些配置信息、热点数据缓存本地,降低数据库压力。

引申:缓存穿透、雪崩,缓存失效,一致性hash。

集群

使用负载均衡通过集群减轻应用服务器的访问压力。

引申:会话管理。需要关注session是统一管理还是分配到集群中的某台机器。如果是某台那就可能有会话粘滞,如果随机一台,就可能需要需要会话统一管理。

数据库读写分离

这一步应该细分下为主备-分离,我们现在的系统就是也只是主从备份,没做分离。现在的系统开发,上面这几步都会一步到位,不会慢慢来了。

引申:分离后数据的一致性。

cdn和反向代理

做这一步主要还是把一些请求资源如图片和js往客户端推。缓解后端压力的同时,加速客户端响应。

使用分布式文件系统和分布式数据库系统

感觉使用分布式文件系统主要是处理一些小文件存储。数据库数据量大了后一般都会对业务分库,服务器独立部署,各业务库再独立演化拆分分库分表等。

引申:数据库分布式后,就需要统一的数据访问组件隔离底层,其实在数据库主从后就需要,只是到这一步后需求更迫切。

使用nosql和搜索引擎

搜索功能对于互联网系统尤其电商业务重要性不言而喻。使用nosql做离线分析和日志等,我们之前是利用hbase做订单的二次营销。

业务拆分

不同的业务,不同产品线,然后应用的独立部署。 从系统的新建到后期的数据库的读写分离等过程,业务的拆分应该是一直都存在的,只不过到一定时期后,这个需求更加迫切而已。

引申:系统间,走消息还是rpc等。

分布式服务

可以看到,随着互联网行业的发展,网站系统越来越复杂,想要学习架构,就必然离不开分布式服务的学习!

而对于分布式的学习,小编就不在这里班门弄斧了,我们有更好的老师,下面推荐一本分布式服务的学习书籍。

《分布式服务架构:原理、设计与实战》以分布式服务架构为主线,重点介绍了保证服务化架构的一致性、高性能、高可用的解决方案和至佳实践,并介绍了微服务架构中倡导的容器化过程,以及敏捷开发和敏捷上线的流程,对分布式服务系统架构设计的核心要点逐一介绍,对重点主题配有代码、设计文档和开源项目,每个主题独立成章,让读者不但可以了解大规模分布式微服务系统是怎么设计的,还可以在了解原理的同时,了解作者在实际项目中积累的至佳实践和模式,大大提高互联网项目的实现效率。要点如下。

分布式架构学习要点

√介绍服务化和微服务架构的背景和演化。

√介绍微服务中的常见问题和解决模式。

√提出解决分布式系统一致性问题的有效方案和设计模式。

√介绍酸碱平衡和至终一致性等理论,对分布式服务间出现的服务超时问题给出解决办法。

√提出非功能质量架构设计的方法论,举例说明系统的性能和容量的预估,并介绍压测的方法论和至佳实践。

√提出服务化的日志系统的技术选型依据和大数据日志系统建设的原理、设计与实战,包括ELK等流行框架的介绍与使用。

√详细介绍基于调用的APM系统的设计与实现,并给出实现的至佳实践。

√介绍线上应急和技术攻关的流程和重点,并总结Java服务化系统应急中需要使用的Java虚拟机命令、Linux命令和定制化开发的命令等。

√服务化系统容器化的过程分析和至佳实践。

√服务化系统中敏捷开发的过程和工具。

作者介绍

李艳鹏,现任蚂蚁金服高级技术专家,著有《分布式服务架构:原理、设计与实战》和《可伸缩服务架构:框架与中间件》,是【云时代架构】技术社区的发起者,曾经在易宝支付、花旗银行、甲骨文、路透社、新浪微博等大型IT互联网公司担任技术负责人和架构师的工作,现专注大规模高并发的线上和线下支付平台的应用架构和技术架构的规划与落地,负责交易、支付、渠道、出款、风控、对账等核心支付系统的设计与实现,在移动支付、聚合支付、合规账户、扫码支付、标记化支付等业务场景上有产品应用架构规划与落地的实践经验。

原文发布于微信公众号 - java工会(javagonghui)

原文发表时间:2018-06-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码匠的流水账

聊聊EurekaRibbonClientConfiguration

spring-cloud-netflix-eureka-client-2.0.0.RELEASE-sources.jar!/org/springframewor...

1121
来自专栏c#开发者

C# : row-clickable GridView and get and set gridview rows using JavaScript

Complete C# code: ---------------- using System; using System.ComponentModel; ...

2966
来自专栏Pulsar-V

C#下各种获取时间的姿势

直接贴代码吧 DateTime dt = DateTime.Now; Label1.Text = dt.ToString();//2005-11-5 13:21...

3196
来自专栏跟着阿笨一起玩NET

GB2312转换成UTF-8与utf_8转换成GB2312

1731
来自专栏xingoo, 一个梦想做发明家的程序员

windows程序设计-第四章 system1.c

/*---------------------------------------------------- SYSMETS1.C -- System M...

22910
来自专栏c#开发者

解决msmq接收远程主机私有队列消息的问题!

通过调用windows\system32\mqoa.dll 这个Message Queuing ActiveX Interface API函数就可以做到; 下面...

5107
来自专栏闻道于事

商城项目整理(三)JDBC增删改查

商品表的增加,修改,删除,订单表的增加,确认,用户表的查看,日志表的增加,查看 商品表建表语句: 1 create table TEST.GOODS_TABL...

5415
来自专栏阿炬.NET

c# datetime 格式化

2836
来自专栏菩提树下的杨过

MSDN官方的ASP.Net异步页面的经典示例代码

示例1.演示异步获取一个网址的内容,处理后显示在OutPut这一Label上 using System; using System.Web; using S...

1955
来自专栏跟着阿笨一起玩NET

C#巧用Excel模版变成把Table打印出来

转载:http://blog.csdn.net/gwblue/article/details/38865525

1122

扫码关注云+社区