首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >自动驾驶路径规划-Lattice Planner算法

自动驾驶路径规划-Lattice Planner算法

作者头像
YoungTimes
发布于 2022-04-28 09:53:11
发布于 2022-04-28 09:53:11
3.9K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,我是来自百度智能驾驶事业群的许珂诚。今天很高兴能给大家分享Apollo 3.0新发布的Lattice规划算法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Lattice算法隶属于规划模块。规划模块以预测模块、routing模块、高精地图和定位的结果作为输入,通过算法,输出一条平稳、舒适、安全的轨迹,交给控制模块去执行。我们可以看到,规划模块在Apollo中是一个承上启下的重要模块。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Lattice算法隶属于规划模块。规划模块以预测模块、routing模块、高精地图和定位的结果作为输入,通过算法,输出一条平稳、舒适、安全的轨迹,交给控制模块去执行。我们可以看到,规划模块在Apollo中是一个承上启下的重要模块。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
一个合格规划算法,必须满足几个条件。首先,必须能够使自动驾驶汽车到达目的地;其次,必须符合交规;第三,能够避免碰撞;最后,也需要能保证一定的舒适性。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
在Apollo中,规划算法的输出是一系列轨迹点连成的轨迹。每一个轨迹点包含位置,速度,加速的等信息。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
下面我来介绍一下Lattice规划算法的工作流程。我们以右图中的场景为例。其中红车是我们的自动驾驶汽车,蓝车是其他障碍车,前面蓝色带尖头的曲线是蓝车的预测轨迹。那么这是一个前方即将有车辆并入的场景。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
面对这样的场景,有些司机会按照右图中浅红色的轨迹,选择绕开蓝色的障碍车。另外有一些司机开车相对保守,会沿着右图中深红色较短的轨迹做一个减速,给蓝色障碍车让路。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
既然对于同一个场景,人类司机会有多种处理方法,那么Lattice规划算法的第一步就是采样足够多的轨迹,提供尽可能多的选择
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Lattice规划算法的第二步是计算每一条轨迹计算的cost。这个cost考虑了轨迹的可行性、安全性等因素。我会在后面为大家详细介绍。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
那么有了轨迹的cost以后,第三步就是一个循环检测的过程。在这个过程中,我们每次会先挑选出cost最低的轨迹,对其进行物理限制检测和碰撞检测。如果挑出来的轨迹不能同时通过这两个检测,就将其筛除,考察下一条cost最低的轨迹。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
以右图为例,假设我们首先挑选出cost最低的是深红色较短的轨迹。但我们发现即便猛踩刹车也无法执行这条轨迹。也就是说,这条轨迹超出了汽车的减速度上限。那么它就无法通过物理限制检测,我们会将其筛除。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
假设我们下一条选出来cost最低的轨迹是右图中深红色较长的轨迹。我们会发现若沿着这条轨迹前进,红车会和蓝色障碍车发生碰撞。也就是说,这条轨迹轨迹无法通过碰撞检测。于是只能放弃这条轨迹,考虑下一条cost最低的。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
这样的过程循环继续下去,假设我们现在挑选出右图中靠左边的深红色轨迹,它既符合汽车的物理性状,也不会有碰撞风险。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
我们最终就将这条轨迹作为规划轨迹输出。
那么下面我们对每一个步骤,进行详细的说介绍。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
首先是采样过程。在正式介绍采样过程之前,作为铺垫,我先来介绍一下Frenet坐标系。在二维平面中,我们通常采用X-Y坐标系来描述问题。但在自动驾驶规划问题中,我们的工作是基于道路的。这种情况下,X-Y坐标系并不是最方便的。所以我们这里需要使用基于车道线横向和纵向的Frenet坐标系。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
那么如何用Frenet坐标系来表示一辆汽车的状态呢?首先我们有一条光滑的参考线(右图中红线),我们可以按右图所示将汽车的坐标点投影到参考线上,得到一个参考线上的投影点(图中蓝色点)。从参考线起点到投影点的路径长度就是汽车在Frenet坐标系下的纵向偏移量,用S表示。而投影点到汽车位置的距离则是汽车在Frenet坐标系下的横向偏移量,用L表示。因为参考线是足够光滑的,我们也可通过汽车的朝向、速度、加速度来计算出Frenet坐标系下,横向和纵向偏移量的一阶导和二阶导。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
这里需要注意的是,我们将横向偏移量L设计成纵向偏移量S的函数。这是因为对于大多数的汽车而言,横向运动是由纵向运动诱发的。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
有了Frenet坐标系的概念,我们下面来介绍一下如何生成一条轨迹。首先我们可以通过计算得到自动驾驶汽车在Frenet坐标系下的在零时刻的起始状态,也就是汽车的当前状态。为了生成一条轨迹,第一步就是在Frenet坐标系下采样一个在T1时刻的末状态。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
第二步就是将末状态和起始状态做多项式拟合。分别形成横向和纵向的多项式轨迹。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
有了横向轨迹和纵向轨迹之后,第三步就是二维合成。给定一个时刻T*,我们可以计算出在T*时刻的纵向偏移量和横向偏移量,再通过参考线,即可还原成一个二维平面中的轨迹点。通过一系列的时间点T0T1...,Tn,可以获得一系列的轨迹点P0P1,…,Pn,最终形成一条完整的轨迹。了解了如何生成一条轨迹之后,下面我来介绍一下如何采样一系列轨迹。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
首先介绍如何采样横向轨迹。横向轨迹的采样需要涵盖多种横向运动状态。现在Apollo的代码中设计了三个末状态横向偏移量,-0.50.00.5,以及四个到达这些横向偏移量的纵向位移,分别为10204080。用两层循环遍历各种组合,再通过多项式拟合,即可获得一系列的横向轨迹。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
对于纵向轨迹的采样,我们需要考虑巡航、跟车或超车、停车这三种状态。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
在停车状态中,给定停车点,末状态的速度和加速度都是零,所以末状态是确定的。
那么我们只需用一层循环来采样到达停车点的时间即可。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
在介绍跟车/超车的采样逻辑之前,我们需要介绍一下S-T图的概念。以左图中的场景为例,蓝色障碍车从车道右侧切入,在T_in时刻开始进入当前车道。那么这个场景对应的S-T图就如右图所示。从T_in时刻开始出现一块斜向上的阴影区域。这块阴影区域的高度就是蓝色障碍车的车身长,上边界表示车头,下边界表示车尾,斜率表示车速。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
如果上述场景变成这样,障碍车从T_in时刻进入车道,然后在T_out时刻离开车道。那么这个场景对应的S-T图就会缩短。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
有了S-T图的概念,我们观察左图中的两条规划轨迹。红色的是一条跟车轨迹,绿色的是超车轨迹。这两条轨迹反映在S-T图中,就如右图所示。红色的跟车轨迹在蓝色阴影区域下方,绿色的超车轨迹在蓝色阴影区域上方。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
我们采样末状态时,就可以分别在S-T图中障碍物对应的阴影区域的上方和下方分别采样。上方的末状态对应超车,下方的末状态对应跟车。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
如果有多个障碍物,我们就对这些障碍物分别采样超车和跟车所对应的末状态。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
那么总结下来就是遍历所有和车道有关联的障碍物,对他们分别采样超车和跟车的末状态,然后用多项式拟合即可获得一系列纵向轨迹。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
我们将三组纵向轨迹组合起来,就可以获得所有纵向轨迹。再将所有纵向轨迹和所有横向轨迹两两配对二维合成,就可以完成轨迹采样的工作。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
现在我们来介绍一下轨迹的cost的实现方法。我们前面提到,轨迹规划所需要满足的四点要求,分别是到达目的、符合交规,避免碰撞、平稳舒适。针对这四点要求,我们设计了六个cost,cost越高就表示越不满足要求。下面我们一一介绍这六个cost的设计思路。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
首先是到达目的的cost。这里分成两种情况,一个是存在停车指令(比如红灯)的情况,另一个是没有停车指令的。如果存在停车指令,相对大的车速,其对应的轨迹cost就越大;如果没有停车指令,那么低速轨迹的cost就会越大。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
怎么实现这样的效果呢?我们针对这两种情况分别设计了参考速度。左图蓝线表示没有停车指令时的参考速度。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
我们可以看到这种情况下,绿色的加速轨迹会获得一个较小的cost,而红色的减速轨迹会获得一个相对较大的cost。那么如果存在停车指令,参考速度就会想右图中的蓝色曲线一样呈下降趋势。那么这种情况下,同样的两条轨迹,他们的cost大小关系就会正好相反。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
第二个cost是横向偏移cost。设计这个cost是为了让自动驾驶汽车能尽量沿着道路中心行驶。那么像左图汽车靠道路一边行驶,和中图画龙的行驶轨迹,他们的cost都相对较高。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
第三个cost是碰撞cost。左图中的两条轨迹,反映在右图S-T图中,我们可以发现红色的轨迹和蓝色障碍车在S-T图中的阴影区域有重叠,说明有碰撞风险,那么它的碰撞cost就会相对较高。而绿色的轨迹在S-T图中反映出来的碰撞风险较小,那么它的碰撞cost就相对较低。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
第四个cost是纵向加加速度的cost。加加速度(jerk)是加速度对时间的导数,表示加速度的变化率。我们用加加速度的最大值值来表示这个cost。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
第五个cost是横向加速度的cost。设计这个cost是为了平稳地换道。那么像左图猛打方向盘的轨迹,它的横向加速度cost就会相对较大。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
最后一个cost是向心加速度cost。设计这个cost是为了在转弯或调头的时候能够减速慢行。在弯道处,车速慢的轨迹,其向心加速度cost就会相对较低,那么就会更容易被率先挑选出来。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
这六个cost的加权求和就是轨迹的总cost。开发者可以根据产品的需要,调试这六个权重。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
这里介绍一下限制检测和碰撞检测。限制检测考察的内容有轨迹的加速度、加加速度、和曲率。碰撞检测则是把自动驾驶汽车的轨迹和其他障碍物的预测轨迹进行比对,观察是否有轨迹重叠。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
对于换道场景,Lattice算法仅仅需要对目标车道对应的参考线做一次采样+选择的流程。本车道和目标车道均能产生一条最优轨迹。给换道轨迹的cost上增加额外的车道优先级的cost,再将两条轨迹比较,选择cost较小的那条即可。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Lattice规划算法已经在新石器无人驾驶微型物流车和长沙智能驾驶研究院重卡中落地。我们也将继续深度合作,提高技术的同时,拓展更多产品的应用。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
以上就是Lattice Planner规划算法的介绍和分享。非常感谢大家的参加!也欢迎大家提出问题,进行交流。更多Apollo相关的技术干货也可以继续关注后续的社群分享。

Apollo问答 | 关于Lattice Planner规划算法的若干问答

上周,我们在Apollo开发者交流群内做了,这里,我们将社群分享里开发者提出的问题进行了归纳整理,现场没有得到回答的问题,大家可以从本期问答内寻找答案。

1、Q: Lattice Planner将规划统一成代价函数,寻找代价最小的。在规划的上层是否还需要决策层?

A: 在规划上层的决策仅仅包含了来自交规的停车指令(比如红绿灯),其余的策略均有下层采样+cost来完成。

2、Q: Lattice Planner适用于哪些场景?

A: Lattice Planner现在已经在低速园区和高速公路的场景中由产品落地。对于普通城市道路,对于相对复杂的交规处理还有待完善。

3、Q: 这个算法适合多弯道复杂的场景下吗?复杂的停车场等?

A: 该算法可以处理多弯道的场景。对于停车场暂不使用,因为这个算法首先需要参考线,而复杂的停车场很难做出一条参考线。

4、Q:Cost里面已经考虑了碰撞,为什么还要做碰撞检测

A: Cost里面的碰撞仅仅是把有碰撞风险的轨迹的cost值设置的比较高,为了把这样的轨迹优先级排到比较后,从而使得我们能够优先考察其他更安全的轨迹,但它并没有起到删选轨迹的作用,是一个比较soft的限制。而后面的碰撞检测是出于安全的考虑,把这条轨迹筛除,这是一个hard的限制。

5、Q: Lattice Planner和EM Planner的区别是?或者说分别应用在什么场景下?

A: Lattice Planner主要基于采样+选择,而EM Planner的思路是逐层优化迭代。从规划层面来说,两者均可用于各种场景。从决策层来看,Lattice的决策相对简单,适用于相对简单的场景,如低速园区,高速公路。EM算法对交规的决策做的相对更完善,可以处理相对复杂的普通城市道路。

6、Q: 高横向轨迹和纵向轨迹俩俩组合咋样理解?是横向的一条轨迹和纵向的所有轨迹组合吗?

A: 两两组合指的是每一条横向轨迹和每一条纵向轨迹的组合。

7、Q: 计算量是不是有点大?普通CPU可以吗?

A: 以目前的经验来看,普通CPU是可以处理的。当然,这个算法可以随着计算机性能的提升,采样更多的轨迹,使得我们对解空间的涵盖更加完备。

8、Q: 关于轨迹的生成,Lattice使用的是多项式拟合,一般使用三项还是五项?另外,老师说是在st图上下阴影处取样,那是取多少个点?那个末状态是指超车结束的状态点吗?

A: 对于横向轨迹的多项式拟合,因为有有初始状态的零阶导,一阶导,二阶导,和末状态的零阶导,一阶导,二阶导,一共六个变量,所以拟合五次多项式。对于纵向轨迹,在停车和跟车状态,也都是五次多项式,但对于巡航状态,由于我们不需要确定末状态的S值,所以只有五个变量,那么用四次多项式就可以了。在ST图上下取样,点的数目可以由开发者自行决定,这个没有限制。末状态指的就是超车结束的状态点。

9、Q: 只有起始状态和末状态怎么进行横向和纵向的拟合?

A: 构建多项式,使得多项式在起始时刻和末时刻的各阶导数和起始状态末状态吻合。

10、Q: Lattice Planner是路径规划的算法,但也涵盖了部分行为规划的处理内容?

A: 是的。横向轨迹主要针对路径,纵向轨迹主要针对速度、加速度等行为。

11、Q: 多项式拟合,是什么多项式?拟合后如何保证满足无人车的运动学和动力学要求?

A: 多项式指的就是普通的多项式,拟合时已经通过高阶导数考虑了动力学要求。

12、Q: Apollo的代码中出现了S-L坐标系和frenet坐标系的名称,这两个是否是指同一个坐标系?

A: 这两个指的是同一个坐标系。

13、Q: 高精度地图的输出格式是怎样的?包括用于导航的矢量图、用于定位的点云图以及全局的路径。对于高精度地图这一块希望能够有详细的介绍。

A:可以参考 https://github.com/ApolloAuto/apollo/blob/master/modules/map/data/README.md 如 README 所示,xml, bin, txt, lb1 都是不同的文件格式,适配不同的读取器,内容是一致的。

14、Q: 多项式拟合具体方法是什么?如何避免拟合的曲线超出路面范围?

A: 拟合的具体方法是求解多项式系数的线性方程组。开发者可以通过添加在路检测的检查validity check来避免曲线超出路面范围。

15、Q: 换道场景,是要提前获取目标车道和当前行驶车道的参考线吗?

A: 是的,这个信息在Apollo里都是有的。

16、 Q: Frenet坐标系下面是一个车道一个中心线?还是一条线一个中心线?这两的s值的0点是从什么地方开始算的?

A: 一个车道一个中心线。S值的0点是从参考线的起点开始。参考线的起点会随着主车的位置做实时动态调整,通常是在主车车身后30米左右的位置。

17、Q: 在障碍车辆较多的环境下可能需要频繁的规划路径,由于cost值有多个评价组成,有可能多次出现最佳轨迹的横向方向完全相反的情况,可能造成车辆左右微微摆动,如何解决这种情况?

A: 在这种情况下,建议额外补充一个和上一个计算周期相似性的cost。

18、Q: 对于单向双车道场景,规划的时候是只规划行驶车道还是规划双车道?

A: 如果有换道需求的话,会同时规划两条车道。

19、Q: 初始状态本车的theta是车头朝向还是指车速朝向, 初始状态曲率怎么计算,用方向盘角度推?

A: 初始状态的theta是车头方向。曲率是基于IMU的信息计算出来的。

20、Q: 在运行Apollo demo时 ,在只有软件模拟没有硬件的情况,能不能测试和调试规划算法,能的话怎么做?

A: Apollo有一个开放的仿真平台,azure.apollo.auto,开发者可以在仿真平台中调试规划算法。

21、Q: 多项式具体形式如何?拟合拟合后如何保证满足无人车的运动学和动力学要求?

A: 多项式就是普通的幂次多项式。拟合出来以后,可以通过限制检测来筛选出符合无人车动力学模型的轨迹。

22、Q: Lattice算法的输入也是referenceLine吧,这个是通过routing模块给出的route segment生成的,和EM Planner一样,理解正确么?

A: 正确。

23、Q: 有碰撞风险的轨迹为什么不在cost环节或者之前直接删掉?

A: Cost环节仅仅是一个soft的排序,并不做删除的工作。

24、Q: 如果如果在过弯道的时候,reference line上的end point有噪音,在不停都抖动,如何在这种情况下规划一条稳定的轨迹,谢谢。

A: 这就需要我们不断优化reference line的平滑算法。

25、Q: 现在Apollo的代码中设计了三个末状态横向偏移量,-0.5,0.0和0.5,以及四个到达这些横向偏移量的纵向位移,分别为10,20,40,80。能解释下为什么这样定意思这些常量?

A: 这些常量是根据平时路测的经验得到的。开发者可以根据自己的产品和场景来调整这些常量。

26、Q: 只有起始状态和末状态怎么进行横向和纵向的拟合?

A: 通过求解多项式的系数是的起始点和终止点的各阶导数吻合。

27、Q: 关于轨迹的生成,Lattice使用的是多项式拟合,一般使用三项还是五项?另外,老师说是在st图上下阴影处取样,那是取多少个点?那个末状态是指超车结束的状态点吗?

A: 一般是5阶多项式,在cruise状态下,用4阶多项式。在st图中的取点个数没有规定,开发者可以根据需要来调试。

28、Q:

图中确定了纵向拟合曲线之后,如何确定横向的拟合曲线?

A、横向轨迹在第18页ppt中有介绍。

29、Q: 轨迹采样时纵向位移选取10 20 40 80 ,这是经验值吗?是不是需要根据车速进行调整?

A: 这是经验值。我们也正在改进,使得它能根据车速调整。

30、Q: 规划轨迹中的速度如何设定,是否根据起始点速度、终点速度、以及轨迹距离,计算出一个平稳加速度,然后平稳地加速过去?但是我看PPT中跟车的场景,到达reference speed的过程加速度似乎并非为一个常量。

A: 轨迹的平稳性可以通过cost来筛选。所以就要求我们在sample的过程中涵盖面尽可能的广泛。

31、Q: 横向运动是由纵向运动诱发的,该如何理解?

A: 普通的车子的轮胎不会转到水平位置来做单纯的横向运动。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 半杯茶的小酒杯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
数字化 IT 从业者知识体系 | 应用技术架构 —— 概览篇
应用技术架构整体上经历了从单体技术架构 -> 垂直架构 -> SOA 架构 -> 微服务架构 -> 无服务器架构 -> 服务网格架构 -> 分布式多运行时架构。在互联网时代之前,应用技术架构发展较为缓慢,随着互联网的出现,特别是 web2.0 和 web3.0 的出现和发展,应用技术架构在快速迭代和演进,以满足市场和商业的诉求。
腾讯云 CODING
2022/03/16
1.3K0
数字化 IT 从业者知识体系 | 应用技术架构 —— 概览篇
数字化 IT 从业者知识体系 | 应用技术架构 —— 服务网格架构
2013 年容器技术 Docker 开源,2014 年容器编排工具 Kubernetes 开源。2015 年,云原生计算基金会(CNCF)成立,标志着应用进入云原生时代, 2016 年 9 月 14 日,Envoy 的开源标志着应用技术架构进入到服务网格(Service Mesh)时代,2017 年 5 月 24 日,Google、IBM、Lyft 共同宣布 Istio 开源标志着进入由控制面和数据面组成的服务网格成为主流。Istio 是当前最受欢迎的服务网格技术。
腾讯云 CODING
2022/03/16
9200
数字化 IT 从业者知识体系 | 应用技术架构 —— 服务网格架构
国内首推《无服务器架构技术白皮书》,云原生技术标准体系持续完善
近几年无服务器架构技术的崛起,让人们看到了软件开发的新世界。然而,无服务器架构在国内仍处在初级阶段,业界对其概念认知尚不清晰。那么,无服务器架构在国内将如何发展,能否成为未来技术发展的风向标?
科技云报道
2022/04/15
6670
国内首推《无服务器架构技术白皮书》,云原生技术标准体系持续完善
应用技术架构 —— 单体架构 & 垂直架构 & SOA 架构
1968 年的软件危机产生了软件工程,并且催生了面向对象的高级语言,例如 1972 的 C 语言,同时产生了我们的单体式的技术架构,单体架构的特点是所有代码逻辑都耦合在一个项目中。
腾讯云 CODING
2022/03/16
6K0
应用技术架构 —— 单体架构 & 垂直架构 & SOA 架构
应用技术架构 —— 微服务架构
在 2010s 进入移动互联网(web3.0)时代,互联网用户规模再次迎来井喷式增长,面向服务的技术架构在服务海量规模用户时显得力不从心。SOA 架构中 ESB 存在单点以及 RPC 中缺少服务的治理能力,ESB 和 RPC 架构都很难满足移动互联网海量用户的要求,微服务开始出现,并成为今天技术架构的主流。
腾讯云 CODING
2022/03/16
1.9K0
应用技术架构 —— 微服务架构
应用技术架构 —— 分布式应用多运行时架构
在分布式系统中,应用通常包含业务逻辑、非功能性需求(NFR)和中间件依赖(三方依赖)。在应用程序中,只有业务逻辑才承载具体的业务价值,NFR 和三方依赖是必要的非增值活动,不直接产生业务价值,但是非增值活动耗费开发人员大量的时间和精力,导致业务交付速度慢。
腾讯云 CODING
2022/03/16
2.2K0
应用技术架构 —— 分布式应用多运行时架构
应用部署与管理 —— Kubernetes 架构
随着虚拟化技术和云计算的发展,为容器技术的发展创造了条件,2013 年,dotcloud 公司开源容器技术 Docker,受到了业界的极大关注和欢迎,一种新的构建和交付方式迅速风靡全球。Docker 解决了应用打包和分发问题,随着 Docker 与微服务等技术的深入融合,应用编排和管理受到越来越多的关注,也成为大规模容器化的一个重要挑战。以解决容器编排和管理的平台 Kubernetes 在 2013 年横空出世,并与 Docker Swarm、Mesos 展开激烈的竞争,最后 Kubernetes 在 2017 年大获全胜,成为容器编排的实施标准。Kubernetes 作为 CNCF 的第一个毕业项目,凭借自身技术优势以及强大的社区和生态建设,已成为云时代的操作系统,云原生技术的基石。
腾讯云 CODING
2022/03/16
1.1K0
应用部署与管理 —— Kubernetes 架构
36氪报道:「好雨云」能否成就 Gartner 心中的技术主流?
文章转载自36氪 作者:韩旭 原标题:《「好雨云」搭建无服务器 PaaS,将服务器和应用解耦,能否成就 Gartner 心中的技术主流?》 企业的价值产生于跟业务直接相关的应用层,但想要到达交付应用的阶段,企业往往需要从最底层计算资源管理开始做起,这就意味着企业不得不处理非常多的事情,比如有了服务器之后需要搭建各种环境、搭建好之后测试环境,对于环境的支持则需要高级架构师、高级程序员,后期还要专门的运维人员维护,工作复杂而琐碎,重复性高。 好雨云从业务角度切入,提供无服务器 PaaS,连接底层计算资源和上层
Rainbond开源
2018/05/31
5700
云原生-不是简单的微服务+DevOps+容器云集成
今天准备谈下云原生的概念,在前面文章里面已经对微服务,DevOps有了比较详细的一个描述和说明,对于Docker容器云网上材料比较多,因此不准备再详细去描述。
人月聊IT
2025/06/24
860
云原生-不是简单的微服务+DevOps+容器云集成
数字化 IT 从业者知识体系 | 应用部署与管理 —— 容器技术
容器是打包代码及其所有依赖项的标准软件单元,因此应用程序可以从一个计算环境快速可靠地运行到另一个计算环境。
腾讯云 CODING
2022/03/16
7040
数字化 IT 从业者知识体系 | 应用部署与管理 —— 容器技术
数字化 IT 从业者知识体系 | 软件开发方法 —— 瀑布篇
软件危机诞生了软件工程,同时也产生了软件开发方法。第一个系统化的软件开发方法是瀑布软件开发。瀑布模型(Waterfall Model)是 Royce 在 1970 年提出的,他把大型软件开发分为:分析与编程,像工厂流水线一样把软件开发过程分成各种工序,并且每个工序可以根据软件产品的规模、参与人员的多少进一步细分成更细的工序。该模型非常符合软件工程学的分层设计思路,所以成为软件开发企业使用最多的开发模型。瀑布模型出道即巅峰,发展至今,仍然是主要的软件开发方法之一,深刻影响着软件开发协作方式。瀑布模型的出现让软件开发方法实现了从无序到有序的突破,极大缓解了当时的软件开发混乱程度和高失败率,成为当时软件工程的福音。
腾讯云 CODING
2022/01/21
1.2K0
数字化 IT 从业者知识体系 | 软件开发方法 —— 瀑布篇
企业级PaaS平台OpenShift
本文摘自于山金孝,潘晓华,刘世民撰写的《OpenShift云原生架构:原理与实践》一书,经出版方授权发布。
Satoh_AI
2020/06/03
3.8K0
企业级PaaS平台OpenShift
(译)无服务器架构
无服务器运算,或者简单说无服务器,是软件架构界的一个新热点。三大云——亚马逊、谷歌以及微软都在无服务器方面下了重注,我们会看到很多的书籍、开源项目、会议以及软件供应商,都不约而同的关注这一主题。但是什么是无服务器?是否值得重视?为什么值得重视?本文中我希望能在这一问题方面给读者一些启迪。
崔秀龙
2019/07/23
3.6K0
(译)无服务器架构
无服务器架构,云计算的下一个纪元
传统上,Web应用程序通常部署在Web服务器上。为了使应用程序在服务器上运行,可能需要花费数小时来下载、编译、安装、配置和连接各种组件。计算机的操作系统也需要不断进行升级和修补,以解决安全漏洞。而管理服务器是一项非常耗时的工作,通常需要专门且经验丰富的系统操作人员,这让很多工程师感觉到身心俱疲。
SDNLAB
2020/03/27
1.9K0
什么是云原生?有哪些发展方向?终于有人讲明白了
到底什么是云原生?不同的企业对于云原生有不同的解释,当前在业界具有广泛影响力的云原生计算基金会(Cloud Native Computing Foundation, CNCF)认为,云原生是一类技术的统称,通过云原生技术,我们可以构建出更易于弹性扩展的应用程序。
IT阅读排行榜
2020/05/06
8.4K0
年中盘点 | 2022年,PaaS 再升级
过去十五年,是云计算从无到有突飞猛进的十五年。PaaS作为云计算的重要组成部分,在伴随着云计算高速发展的同时,在云计算产业链中的关键性作用日渐凸显。关于PaaS,很多人都认同一个观点,在公有云上,除了IaaS和SaaS,其余的都是PaaS。但PaaS到底是什么?它从哪里来,将到哪里去?PaaS有哪些细分领域?哪些厂商是PaaS市场领导者?PaaS和现在流行的容器管理平台、企业中台和低代码平台之间的关系又是什么?这些问题的答案,向来是众说纷纭、莫衷一是。要回答这些问题,且听笔者为您娓娓道来。
SammyLiu
2022/12/05
1.1K0
年中盘点 | 2022年,PaaS 再升级
数字化 IT 从业者知识体系 | 软件开发方法 —— 精益篇
精益软件开发是精益制造原则和实践在软件开发领域的变体。它基于丰田生产方式(TPS),由敏捷社区引入并发展。精益产品开发的目的是消除软件生产中的浪费和持续改进。
腾讯云 CODING
2022/03/16
7980
数字化 IT 从业者知识体系 | 软件开发方法 —— 精益篇
云计算热度不减,如何高效掌握云计算技能?
在“互联网+”、《 中国制造2025》等一系列战略推动和企业自身转型升级的迫切需求下,上云是企业顺应数字经济发展潮流,实现数字化转型的重要路径,企业上云已经成为大势所趋,而云计算无疑是企业更快部署信息化应用的“利器”。
SDNLAB
2019/08/29
8.3K1
云计算热度不减,如何高效掌握云计算技能?
【云端风云:云计算全局解密】一篇文章读懂云计算技术及其未来发展趋势
在当今数字化浪潮中,云计算如一颗闪烁的科技明珠,为企业和个人带来了前所未有的灵活性、效率和创新力。本文将带领读者深入探索云计算的核心概念、关键服务模型以及未来发展趋势。云计算不仅是数字化时代的基石,更是推动创新和变革的引擎。站在云端风云之巅,我们将解析云计算的奥秘,揭晓数字化未来的蓬勃蔓延。通过这场科技奇迹的探索,我们将共同领略云计算为全球带来的变革,见证科技与未来的奇妙融合。
奥耶可乐冰
2023/11/24
1.6K0
【云端风云:云计算全局解密】一篇文章读懂云计算技术及其未来发展趋势
应用部署与管理 —— Docker
容器是应用程序层的抽象,将代码和依赖项打包在一起,多个容器可以在同一台计算机上运行,并与其他容器共享 OS 内核,每个容器在用户空间中作为隔离的进程运行。虚拟机是将一台服务器转变为多台服务器的物理硬件的抽象,虚拟机管理程序允许多个 VM 在单台计算机上运行,每个 VM 包含操作系统、应用程序、必要的二进制文件和库的完整副本:
腾讯云 CODING
2022/03/16
8210
应用部署与管理 —— Docker
推荐阅读
相关推荐
数字化 IT 从业者知识体系 | 应用技术架构 —— 概览篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档