当前位置 博文首页 > 文章内容

    从​程序员到大型分布式架构师,自己到底位于哪里(二)

    作者:shunshunshun18 栏目:未分类 时间:2021-12-28 18:30:29

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    写这篇文章为了更清楚自己技术能力,同时分享给大伙,看看自己技术水平位于哪里。

    个人能力有限,基于我所理解的知识来讲解一下:从程序员到大型分布式架构师,我们自己到底位于哪里。

    描述不当之处还请各路大佬点明,老弟也好更上一层楼!!!

    本人就以之前画的微服务系统架构图来逐一讲解。

    上一篇讲述了:Java程序员刻苦修炼 锻造基础

        从程序员到大型分布式架构师,自己到底位于哪里(一)

    这一篇接着讲述……

    1.分布式服务治理方案

    1.1.简述几个名词

    什么是服务治理

        反过来读一下:治理服务。分布式服务治理方案就是通过什么方案来治理分布式的服务。强调的还是“服务”,所以治理的前提是有错综复杂的业务服务,才需要整这么一套方案去解决这问题。

    分布式架构是什么?

        一整套的分布式架构的搭建就像建造一个自动化生产车间。新增的“业务系统N”部署到这个大家庭便会拥有架构中一整套的能力(服务治理能力、自动化能力、大数据能力等等)。

    应用上云和分布式架构

        在这几年经常会听到或谈到“上云”这个词语,“应用上云”和“分布式架构”这两者乍眼一看两者没啥关系,其实关系大得很。就以阿里云为例:你将新增的“业务系统N”部署到阿里云,需要什么能力的服务是不是用钱买就行啦?或者直接搞个“行业解决方案”。这种第三方云又称为公有云;有“公”就有“私”,私有云就是企业自个独有的云;两者一混就变成了混合云。云可以看作是完整的一套分布式架构+基础设施。怎么上云,先申请资源(软件资源、硬件资源和网络资源),再将业务服务部署到这分布式架构中,从而实现所有资源可插拔和服务的统一管理,这就是为什么现在都喜欢搞“上云”的原因之一。

    本文是为读者做定位和后续学习有目标,在此不展开太多。

    1.2.技术实现方案

    常用的两种分布式服务治理方案:RESTful 和 RPC 分布式服务治理方案。

    两者最本质的区别

        RESTful 强调一切都看作资源,对资源进行操作;

        RPC 是远程过程调用,强调的是客户端和服务端的交互。

    RESTful分布式服务治理技术方案

    技术实现方案:SpringCloud

    RPC分布式服务治理技术方案

    技术实现方案:Dubbo + Zookeeper

    两种方案中都没有提供一套完整的服务治理技术实现,还需加入链路追踪技术、监控告警系统、日志分析系统等​。

    链路追踪系统

    在分布式环境中一个业务处理涉及多个服务间的调用,传统方式通过系统日志很难做到故障问题快速定位,而通过链路追踪可以实现故障快速定位。链路追踪系统除了故障快速定位功能,还有可视化(如性能指标)、依赖优化(梳理服务依赖关系以及优化)、数据分析(如用户的行为路径,汇总分析应用在很多业务场景)。

    监控告警系统

    ​一般监控有流量监控、异常监控、资源使用率、请求延迟等。当监控的数据超过指定范围,就会通过邮件或电话进行告警通知,也可以在可视化平台查看监控数据,收到告警通知的人员便会去处理相应问题。

    日志分析系统

    日志分析是运维工程师解决系统故障,发现问题的主要手段。

     

    服务治理技术包含在红色框中

    2.DevOps(开发运维一体化)

    为了高可用,将业务服务集群化是一件很正常的事,但每次都要改动都要部署到不同的几台服务器,做着重复的工作而且很有可能出错,一次改动一天部署完成算是很顺利的事了。是不是很想要有自动化部署这种东西呢?其实自动化在很多行业早就有了,现在很多行业都已迈入智能化时代了。

    DevOps开发运维一体化并不是让开发去做运维,而是使开发和运维通过一些机制有机结合、高效统一,成为一个整体,从而消除开发团队和运维团队之间的隔阂,有效提升应用服务的研发和运维运营效率。

    关键技术

    1. kubernetes(自动化运维平台)-- 平台

    2. Jenkins Pipeline(流水线)  -- 流水线

    3. docker(容器)  -- 包裹

    主要涉及两种角色:开发人员(developer)和 运维人员(Operation)

      &  

    两者的隔阂其实是通过容器化部署方式来解决,运维人员只需要知道容器镜像怎么部署即可,不需要知道其中的细节。

    持续集成(CI):从程序员提交代码到自动打包生成docker镜像,并部署到指定测试环境

    持续交付和部署(CD):测试通过后,运维人员将docker镜像部署到生成环境

    整个流程都可以在k8s平台中看到,并且支持项目部署的回滚操作,更多细节就不一一展开。

     

    3.大数据接入

    经常会听到大数据“杀熟”,同一个平台杀熟就算了,跨各大平台杀熟就很让人恼火。比如:我在淘宝或京东搜索了下运动器材,然后在各种平台都会收到各式各样的运动器材推荐。这种智能推送又被称为智障推送,比如:我看了某种商品的某种规格后,再次搜索商品就都是这种规格,其实这不是我想要的结果。大数据是把双刃剑,搞得好智能,搞不好智障,甚至触犯法律条款。

    分点简述

    • 大数据平台:Hadoop

    • 数据来源:数据库,缓存中间件,文件存储,数据仓库等等。

    • 数据采集方式:实时采集 和 离线采集

    • 数据采集技术:kafka,flume,sqoop 等等,不同的数据来源使用不同的采集中间件技术

    • 数据存储技术:Hbase,HDFS 等等

    • 数据处理方式:实时处理 和 离线批量处理,分别对应不同的技术栈

    • 数据服务:提供服务实现价值,如:精准营销,浏览,分析检索,下载等等

    • 平台管理技术:Apache Ambari(供应、管理、监控等)和Zookeeper(平台配置与调度)

     

    4.其他

    4.1.内网DNS

    优点:方便记忆和服务迁移IP更换只需要修改DNS即可;

    缺点:DNS服务可能成为性能瓶颈和影响可用性。

    4.2.网络区域和出入网控制

    业务服务都部署在内网环境,主要原因是安全问题和IP资源问题。

    内网环境还可以拆分成多个区域:DMZ区、业务区。DMZ 称为隔离区,对外对内都有防火墙隔离,隔离外网和内网的一个区域。常用于部署以外网对接的系统服务。内网业务区,顾名思义是部署业务相关的服务。

    统一入网:服务部署在内网环境,每个对外提供服务的系统都需要有个入口,为了网络安全和更好管理便有了统一入网,需要提供互联网服务的系统申请入网资源即可。

    统一出网:对于内网系统需要访问互联网资源时,则通过统一出网来控制。

    4.3.安全技术

    网络安全

    • 内网部署,内网专有网络

    • 统一出入网

    • 应用防火墙WAF:免受各种常见攻击(XSS 攻击、注入攻击、DDOS攻击等)

    • 使用HTTPS

    • 运维人员必须通过内网堡垒机来访问内网服务器

    等等

    编码安全

    • 浏览器Cookie 加密与过期

    • 服务间通讯加密

    • 登录防爆力图像验证码等的多种验证方式(如:邮件或短信验证码的一次一密)

    • 数据防爬虫机器人验证

    • 重要信息数据脱敏(如:手机号,姓名,证件号,卡号等)

    等等

    服务器安全

    • 通过渗透测试确认数据库、应用等安全性,常用的技术:nmap、burp suite、sqlmap等。

    • 容器部署的安全性

    • 常用中间件安全性

    等等多种安全技术,从代码到整个平台所涉及之处都要考虑安全问题。

    4.6.其他唠嗑

    随着业务的发展,会持续出现技术问题,业务问题,开发问题,运维问题,业务响应速度等等。避免重复造轮子,需要对通用能力抽离;不同业务不断发展形成不同的软件平台,平台间职能边界划分问题和数据孤岛问题,需要引入领域驱动设计思想和中台思想来解决相应问题,但项目一开始还是建议使用面向对象软件设计方法,不要看到到处说DDD就凑热闹,领域驱动设计在2014年都出书了也不是什么新鲜事物,过度设计还不如层次分明更利于开发维护。

    阅读上一篇:从程序员到大型分布式架构师,自己到底位于哪里(一)

    转载指明出处!!!

    bkbky