开发工程师认证课程

[TOC]

Linux基础指令

  • vim: 使用x退出,文件未修改的话,不更新文件修改时间

  • chmod命令参数

    参数 功能
    u user,指定用户权限
    g group,指定用户组权限
    o others,指定其他用户权限
    a all,指定所有用户权限(u、g和o的组合)
    + 增加权限
    - 移除权限
    = 设置权限
    r 读取权限
    w 写入权限
    x 执行权限
    1/2/4 使用数字表示权限,1:执行;2:写入:4读取

从传统应用开发到敏捷开发

  • 瀑布模式:Waterfall model,依次为 可行性研究、需求分析、软件设计、编码、集成、测试、维护一系列步骤,按顺序进行。

  • 迭代模式:迭代增量开发或迭代进化式开发,整个开发工作被组织为一系列短小的、固定长度的小项目,每一次的迭代都包括需求分析、设计、实现与测试。一次迭代完成系统中的一部分功能或业务逻辑的开发工作。最初交付的是具有基本功能的产品,持续迭代、持续交付。

  • 螺旋模式:将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合大型复杂的系统。“螺旋模型”的核心就在于不需要一开始的时候就把所有事情都定义清楚。刚开始规模很小,当项目被定义更好、更稳定时逐步展开。开发人员可以轻松上阵,实现后再扩大需求,不断轮回重复。

    螺旋模型很大程度上是一种风险驱动的方法体系,每次进入下一轮前都先要进行风险评估。螺旋模型的项目使适用:对于新近开发,需求不明确的情况下,适合螺旋推进,便于风险控制和需求变更。

  • 敏捷开发:Agile Software Develop,是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。

    简单来说,敏捷开发不追求完美设计、完美编码,力求在短周期内开发出产品的核心功能,尽早发布出可用版本,并在后续生产周期内,按照新需求不断迭代升级,完善产品。

    敏捷开发特点:

    • 测试驱动开发:Test-Driven Development,敏捷开发最重要的部分,测试代码能够真实反映业务功能需求;
    • 持续集成:Continuous Integration,集成很频繁,每次集成的改变也很微小,容易定位问题;
    • 重构:Refactoring,在不改变系统外部行为下,对内部结构进行整理优化,使代码向简洁、优美、可扩展方向发展,以适应新的需求,重构贯穿于开发的整个过程;
    • 结对编程:Pair-Programming,包括分析、测试、代码实现和重构过程。结对有更高的纠错能力。
    • 站立会议:Stand up meeting,及时对齐工作内容,透传问题困难;
    • 小版本发布:Frequent Releases,一般以周或月为单位,短期就能发布使用,在使用过程中得到反馈来促进改进;
    • 文档简化:Minimal Documentation,以大量测试代码真实反映需求和系统API的用法(Show me the code)。
    • 以合作为中心:Collaborative Focus,代码共享,有权对其他任何人的工作提出意见和改进建议;
    • 现场客户:Customer Engagement,客户参与到开发团队一起工作,得到客户的快速反馈;
    • 自动化测试:Automated Testing,包括单元测试、功能测试和集成测试,都实现自动化;
    • 可调整的计划:Adaptive Planning,小版本的发布,根据客户的反馈随时做出相应的调整和变化。

    敏捷开发示例——Scrum简介

Srum是当前最流行的敏捷软件开发的方法论和实施框架。

  • Sprint:冲刺,周期性固定的时间段;
  • User Story:用户故事,较小的工作单元。用户故事描述了一个有价值的工作点,可以在一个迭代周期内完成。

瀑布模式-Infosys过程模型

image-20240905205413697

敏捷开发与传统开发模式比较

image-20240905230059413

从传统架构到分布式服务化架构

  • 单体架构:一个归档包(jar或war)包含了应用所有功能的应用程序,称之为单体应用。

  • SOA架构:Service-Oriented Architecture,面向服务的架构。面向服务的架构是一个组件模型,将应用程序的不同功能单元(称为服务)进行拆分,通过服务之间定义良好的接口和协议联系起来

    • 服务器请求者
    • 服务器提供者
    • 服务注册中心:包含可用服务的存储库,允许感兴趣的服务请求者查找服务提供者接口。
    • 企业服务总线:ESB,提供可靠的消息传输、服务接入、协议转换、数据格式转换、基于内容的路由等功能,屏蔽了服务的物理位置、协议和数据格式。ESB是实现SOA治理的重要支撑平台,是SOA解决方案的核心。
  • 微服务架构:以开发一组小型服务的方式来开发一个独立的应用系统。其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API轻量的机制来相互通信。

    微服务架构将功能的每个元素放置到分离的多个服务器中,通过将不同的服务分布于不同的服务器,并按需复制服务的方式实现扩展。

    1. 每个微服务可以独立运行在自己的进程里;
    2. 一系列独立运行的微服务共同构建起整个系统;
    3. 每个服务为独立的业务开发,一个微服务只关注某个特定的功能,如用户管理、订单管理;
    4. 微服务之间通过一些轻量的通信机制进行通信,如REST API接口进行调用;
    5. 可以使用不同的语言与存储技术;
    6. 全自动的部署机制。

    微服务带来的挑战:

    • 运维要求较高。需要保证几十几百个服务器的正常运行与写作。
    • 分布式固有的复杂性。对于分布式系统来说,系统容错、网络延迟、分布式事务带来了更大的挑战。
    • 接口调整成本高。微服务之间通过接口进行通信,修改某个微服务的API可能涉及的相关接口都需要调整。
    • 重复冗余。有些功能达不到分解为一个微服务的程度,可能会重复散布在各个微服务里。

image-20240907150804018

云计算对软件开发的改变

软件开发历史进程:

​ 程序设计阶段——软件设计阶段——软件工程阶段

云计算3种基本服务类型:

  • IaaS:Infrastructure as a Service,基础设施即服务. ——host
  • PasS:Platform as a Service,平台即服务. ——build
  • SaaS:Software as a Service,软件即服务. ——consume

云原生简介

云原生概念

定义:利用云计算技术,在公有云、私有云或混合云这些动态的环境中,构建和运行弹性可扩展的应用。

云原生应用的本质是分布式的,充分利用了云基础架构的特性。构建一个云原生应用有很多不同的技术和工具。

  • 从计算的角度看:主要有两个容器计算

  • 从架构的角度看,微服务架构已经被公认为体现云原生的架构

云原生计算基金会定义的六大特点:

  • 容器化封装
  • 自动化管理
  • 面向微服务
  • 服务网络
  • 声明式API

代表性技术包括:容器、服务网格化、微服务、不可变基础设施和声明式API。

软件开发方法:通过声明式代码部署的容器、微服务、无服务器函数技术和不可变的基础设施是这种架构方式的通用组成元素。

松耦合系统:容错性好、易于管理、便于观察

四个要点:微服务、容器化、DevOPS、持续交付

image-20240907161323458

1. 容器:云原生的基石

Container:容器,把应用代码运行所需的各种配置、依赖关系和环境变量打包、封装进一个系统,可以很方便的移动到全新的服务器节点上。

Docker:容器理念最普及的一种应用技术,也是最受欢迎的容器格式标准。

K8S:Kubernetes,容器编排和管理工具中的事实标准。

2. 微服务:云原生的优势

特点:小而美、松耦合、灵活、易集成

主要问题:服务如何切分

3. DevOps:云原生的路线

DevOps:Development + Operations,可以报DevOps看做开发(Dev)、技术运维(Ops)和质量保障(QA)三者的交集,是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保障部门之间的沟通、协作和整合。

DevOps就是打通开发运维壁垒,实现开发运维一体化。DevOps希望做到软件产品交付过程中IT工具链的打通,使得各个团队减少时间损耗,更高效的协同工作。

4. 持续交付:云原生终极目标

持续交付是一种软件工程手法,能让软件产品的产出过程在一个短周期内完成,保证软件可以稳定、持续的保持在随时可以发布的状态。

价值核心:小步快跑、快速迭代,不断的交付、不断的修正。

云原生应用开发的前提

1. 分布式系统:实现云原生的核心

CAP定理:任何一个通过网络连接的共享数据的分布式系统,最多只能同时满足以下三个需求中的两个。

  1. 一致性:Consistency,指所有节点访问同一份最新的数据副本
  2. 可用性:Availability,指系统提供的数据或服务必须一致处于可用状态
  3. 分区容错性:Partition Tolerance,指系统在遇到网络分区故障的时候,仍然能对外提供服务

2. 十二要素应用:云原生应用的基础

image-20240910142404255

3. 可用性和服务等级协议

一个云原生应用是由多个服务组合而成的,这些服务常常被封装在容器或者函数中。

SLA:Service-Level Agreement,服务等级协议,用可用性百分比表示的预估服务宕机时间的一个对应表格协议。综合SLA等于各单个服务SLA的乘积,综合SLA永远不可能达到单个服务中的最高SLA水平。

云原生应用的架构与技术原理

打造个人专属网盘

Owncloud: 一个开源免费的专业私有云存储项目。采用了经典的PHP+MySQL组合,支持文件上传至共有云服务。

  • 步骤一:部署网盘运行环境

  • 步骤二:在ECS中部署Owncloud网盘程序

  • 步骤三:利用RDS作为应用的数据库

  • 步骤四:进行文件上传下载的基础功能验证

搭建个人网站

WordPress:使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把WordPress当做内容管理系统(CMS)来使用。

WordPress经典的互联网内容管理系统:

  • 博客搭建
  • 在线商店
  • 社交论坛
  • 视频网站

网站架构:

image-20240904203932273

参考资料:

image-20240904204451582