• 架构师需要具备的知识体系


    前言:

    哲学家常思考的问题:" 我是谁?"" 我从哪里来?"" 要到哪里去?不只是哲学家,我想每个人都有自己对这三个问题的认知。

    如果我们要成为架构师,我们自己要面临的三大问题:

    找准自己定位:我是谁?在哪里?

    怎样做好架构师:我要做什么?

    如何搭建架构师知识体系:我该怎么做?

    这里面就是做事方法论:目标(我要做什么),方法(计划)(我该怎么做),  执行/行动

    要成为优秀合格的架构师,必须具备前瞻性的眼光和系统性的思考能力。而拥有这些能力的前提是你必须完善自己的知识体系。

    互联网思维不是工具,它是世界观。这篇文章之后,你可以尝试构建自己的知识体系了。

    愿每个人都可以像一个U盘一样,自带系统随处插拔。

    愿每个人都可以和别人不一样。

    一、通用技能表

    1、做事方法论:目标、方法、执行。

         我是谁:思维方式,不将就认真做事的人

         如何做事:1)整体把握,找到方法论(解决方案),

                   2)思路:分而治之,优先排列,计划进行(排期完成)。

                   3)及时沟通,反馈,勇于承担责任

                   4)团队意识

         成长:1)和优秀的人在一起

               2)不断学习充电

         完成定义:了解基础原理,自测通过,及时跟踪反馈问题,文档更新

         做一个靠谱的人:“凡事有交代,件件有着落,事事有回音。”

    2、思维结构:   

            《金字塔原理》

    《结构化思维》

            系统思维

    3、文档能力:熟练使用excel,ppt

    4、协作

         类似Trello的在线协同平台

         Slack

         微信

         例会

    5、沟通能力:

    6、业务能力:该行业和本公司的业务逻辑

    7、计划推进:质量控制、进度控制、人员组织、资源协调。

        1)、能够有效的组织各类资源,通过说服、协调等方式得到相关部门或人员的支持,以使计划顺利的推行下去;

        2)、说服力、协调力、推动力、监控与反馈

    8、项目管理能力

    架构评审

    代码规范

    代码 Review

    看板管理

    SCRUM

    敏捷开发

    极限编程(XP)

    结对编程

    FMEA管理模式

    二、专业技能表 

    1、基础知识

    计算基础

    计算机原理

    数据结构和常用算法

    操作系统:进程,线程,内存

    网络

    TCP/IP协议

    TCP/IP网络模型

    HTTP协议原理

    网络IO模型

    Socket网络编程

    2、编程语言

    java

    java基础类库、异常

    JVM原理和调优《深入理解java虚拟机》《java性能优化权威指南》

    框架

    并发《java并发编程实战》

    多线程

    php

    异常

    常用框架

    php

    php基础

    常用框架

    异常处理机制

    深入php内核

    3、程序设计

    高质量编码能力:

    重用性

    低耦合

    可扩展性

    可维护性

    高性能

    安全性高

    面向对象编程:

    MVC编程思想

    掌握建模语言和建模工具:UML

    面向对象思想

    设计模式:

    基础设计模式和设计原则:单一职责、开放封闭原则等.

    常用设计模式

    重构

    4、研发能力

    瀑布模型:需求->需求分析->设计->开发->测试->上线->运维/运营

    调试和解决问题能力

    敏捷思想:快速迭代,任务细分,wiki更新

    5、安全知识

    web安全:xss,sql注入,ddos攻击

    安全维度:漏洞,风险,事件

    https协议

    安全书:  《黑客攻防技术宝典(Web实战篇)》

              《白帽子讲Web安全》

              《Web前端黑客技术揭秘》

              《Web之困》

              《SQL注入攻击与防御》

    6、Linux知识

    7、运维能力

    监控

    持续集成:jenkins

    自动化运维工具:ansible,saltstack

    虚拟化:kvm,vm

    容器docker

    云技术openstack

    DevOps

    8、数据库

    基础理论

    数据库设计的三大范式

    MySQL原理

    MySQL优化

    mysql引擎:

    InnoDB

    MyISAM

    NoSQL:redis/mongo

    9、常用应用软件

     Web server:

    Nginx

    OpenResty

    Apache Httpd

    Tomcat:架构原理,调优方案

    Jetty

    消息队列:

    RabbitMQ

    RocketMQ

    ActiveMQ

    Kafka

    Redis 消息推送

    ZeroMQ

    RPC:

    Dubbo

    Thrift

    gRPC

    数据库中间件:

    DBproxy

    Haproxy

     软件负载均衡:

    几种负载均衡算法: 轮询、权重、负载、最少连接、QoS

    DNS负载均衡

    Nginx

    LVS+Keepalived实现负载均衡

    HAProxy

    Haproxy+Keepalived+MySQL实现读均衡负载

    9、性能

    性能优化方法论

    容量评估

    CDN 网络

    连接池

    性能调优

    10、大数据

    大数据

    Hadoop

    Storm

    Kafka Stream

    11、工程化

    maven

    git

    jenkins

    三、架构基础知识

    1、架构演进

    初始阶段:LAMP,部署在一台服务器

    应用服务器和数据服务器分离

    使用缓存改善性能

    使用集群改善并发

    数据库地读写分离

    使用反向代理和cdn加速

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

    业务拆分

    分布式服务

    2、架构模式

    分层:横向分层:应用层,服务层,数据层

    分割:纵向分割:拆分功能和服务

    分布式

    分布式应用和服务

    分布式静态资源

    分布式数据和存储

    分布式计算

    集群:提高并发和可用性

    缓存:优化系统性能

    cdn

    方向代理访问资源

    本地缓存

    分布式缓存

    异步:降低系统的耦合性 

    提供系统的可用性

    加快响应速度

    冗余:冷备和热备,保证系统的可用性

    自动化:发布,测试,部署,监控,报警,失效转移,故障恢复

    安全:

    3、架构核心要素

    高性能:网站的灵魂

    性能测试

    前端优化

    应用优化

    数据库优化

    可用性:保证服务器不宕机,一般通过冗余部署备份服务器来完成

    负载均衡

    数据备份

    自动发布

    灰度发布

    监控报警

    伸缩性:建集群,是否快速应对大规模增长的流量,容易添加新的机器

    集群

    负载均衡

    缓存负载均衡

    可扩展性:主要关注功能需求,应对业务的扩展,快速响应业务的变化。是否做法开闭原则,系统耦合依赖

    分布式消息

    服务化

    安全性:网站的各种攻击,各种漏洞是否堵住,架构是否可以做到限流作用,防止ddos攻击。

    xss攻击

    sql注入

    csr攻击

    web防火墙漏洞

    安全漏洞

    ssl

    四、架构设计

    1、设计原则

    1、冗余设计  

    2、回滚设计  

    3、监控设计

    4、故障隔离

    5、可独立部署

    6、无状态设计

    7、成熟技术

    8、异步设计

    9、禁用设计

    10、服务可降级

    11、服务可限流

    12、水平扩展

    2、接入层设计

    DNS轮询

    动静分离

    方向代理:LVS,NGINX

    CDN

    接入层安全:DNS劫持、限流,防刷。

    3、应用层设计

    通信机制:RPC,MQ

    异步

    连接池

    配置中心

    4、数据库层设计

    高可用数据库架构

    双主架构

    主从同步

    读写分离

    分表分库

    五、互联网公司经典技术架构

    1.Google.Facebook.eBay.Amazon

    2.微博架构

    3.百度架构

    4.淘宝-阿里技术架构 @ 06334a3

    5.微信-腾讯技术架构 @ 3804af3

    6.美团-点评技术架构 @ fc3cfc8

    7.网易.技术架构

    A.分布式数据库-数据平台-NoSQL

    A.分布式文件系统-缓存

    A.分布式系统-高可用

    B.基础架构-Docker-容器架构

    B.基础架构-FrontEnd

    B.基础架构-及时通讯-语音-视频

    B.基础架构-日志系统

    B.基础架构-消息队列

    C.运维架构-安全

    C.运维架构-自动化运维DevOps

    D.机器学习-人工智能

    E.互联网公司-架构演进

    F.10 papers for architect

    F.10 papers for programmer

    G.编程语言

    H.团队与产品

    I.性能优化

    K.金融-支付

    其他

    互联网公司经典技术架构

    六. GitHub上整理的一些工具和资源

    2.1技术站点

    Hacker News:非常棒的针对编程的链接聚合网站

    Programming reddit:同上

    MSDN:微软相关的官方技术集中地,主要是文档类

    infoq:企业级应用,关注软件开发领域

    OSChina:开源技术社区,开源方面做的不错哦

    51cto,cnblogs:常见的技术社区,各有专长

    stackoverflow:IT技术问答网站

    GitHub:全球最大的源代码管理平台,很多知名开源项目都在上面,如Linux内核

    OpenStack等免费的it电子书:http://it-ebooks.info/

    DevStore:开发者服务商店

    2.2  不错的书籍

    人件

    人月神话

    代码大全2

    计算机程序设计艺术

    程序员的自我修养

    程序员修炼之道

    高效能程序员的修炼(成为一名杰出的程序员其实跟写代码没有太大关系)

    深入理解计算机系统

    软件随想录

    算法导论(麻省理工学院出版社)

    离线数学及其应用

    设计模式

    编程之美

    黑客与画家

    编程珠玑

    C++ Prime

    Effective C++

    TCP/IP详解

    Unix 编程艺术

    《精神分析引论》弗洛伊德

    搞定:无压力工作的艺术

    2.3 平台工具(都是开源的好东东哦)

    Redmine/Trac:项目管理平台

    Jenkins/Jira(非开源):持续集成系统(Apache Continuum,这个是Apache下的CI系统,还没来得及研究)

    Sonar:代码质量管理平台

    git,svn:源代码版本控制系统

    GitLib/Gitorious:构建自己的GitHub服务器

    gitbook:https://www.gitbook.io/写书的好东西,当然用来写文档也很不错的

    Travis-ci:开源项目持续集成必备,和GitHub相结合,https://travis-ci.org

    开源测试工具、社区(Selenium、OpenQA.org)

    Puppet:一个自动管理引擎,可以适用于Linux、Unix以及Windows平台。所谓配置管理系统,就是管理机器里面诸如文件、用户、进程、软件包这些资源。无论是管理1台,还是上万台机器Puppet都能轻松搞定。

    Nagios:系统状态监控报警,还有个Icinga(完全兼容nagios所有的插件,工作原理,配置文件以及方法,几乎一模一样。配置简单,功能强大)

    Ganglia:分布式监控系统

    fleet:分布式init系统

    2.4 爬虫相关(好玩的工具)

    Phantomjs

    berserkJS(基于Phantomjs的改进版本)

    SlimerJS

    CasperJS

    selenium

    2.4 Web 服务器性能/压力测试工具/负载均衡器

    http_load:程序非常小,解压后也不到100K

    webbench:是Linux下的一个网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力

    ab:ab是apache自带的一款功能强大的测试工具

    Siege:一款开源的压力测试工具,可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。

    squid(前端缓存),nginx(负载),nodejs(没错它也可以,自己写点代码就能实现高性能的负载均衡器):常用的负载均衡器

    Piwik:开源网站访问量统计系统

    ClickHeat:开源的网站点击情况热力图

    HAProxy:高性能TCP /HTTP负载均衡器

    ElasticSearch:搜索引擎基于Lucene

    Page Speed SDK和YSLOW

    HAR Viewer:HAR分析工具

    protractor:E2E(end to end)自动化测试工具

    2.5 Web 前端相关

    GRUNT:js task runner

    Sea.js:js模块化

    knockout.js:MVVM开发前台,绑定技术

    Angular.js:使用超动感HTML & JS开发WEB应用!

    Highcharts.js,Flot:常用的Web图表插件

    Raw:非常不错的一款高级数据可视化工具

    Rickshaw:图标库,可用于构建实时图表

    JavaScript InfoVis Toolkit:另一款Web数据可视化插件

    Pdf.js,在html中展现pdf

    ACE,CodeMirror:Html代码编辑器(ACE甚好啊)

    NProcess:绚丽的加载进度条

    impress.js:让你制作出令人眩目的内容展示效果(类似的还有reveal)

    Threejs:3DWeb库

    Hightopo:基于Html5的2D、3D可视化UI库

    jQuery.dataTables.js:高度灵活的表格插件

    Raphaël:js,canvas绘图库,后来发现百度指数的图形就是用它绘出来的

  • 相关阅读:
    彩色文件夹、彩色文件、图标标记(MultiColorWin)快速操作
    git 国内源
    Mysql 日期格式化 复杂日期区间查询
    项目版本管理Git使用详细教程
    SpringBoot 优雅配置跨域多种方式及Spring Security跨域访问配置的坑
    SpringBoot Spring Security 核心组件 认证流程 用户权限信息获取详细讲解
    SpringBoot包扫描之多模块多包名扫描和同类名扫描冲突解决
    初阶绘图
    变量与档案存取
    结构化程式和自定义函数
  • 原文地址:https://www.cnblogs.com/ZenoLiang/p/10242992.html
Copyright © 2020-2023  润新知