linux_china技术雷达linux_china技术雷达
评估

CEL(Common Expression Language) 是一种表达式语言,它快速、可移植且安全,适用于在性能关键应用程序中执行。 CEL旨在嵌入在应用程序中,具有特定于应用程序的扩展,并且非常适合扩展您的应用程序可能已经使用的声明性配置。

在执行表达式语言时,如果盲目调用eval()会导致非常严重的安全问题,但是你可以安全地执行客户的CEL代码。

CEL是构建在Protobuf之上的,所以内置多种数据类型支持,包括Map/List等,也包括Protobuf Message。 这些类型都是基于Protobuf的,所以性能特别高,非常适合高性能场景。 如果CloudEvents场景,你就可以在ECL使用CloudEvents Protobuf格式进行各种操作。

在实际的开发中,CEL也有非常多的场景,如基于角色访问(RBAC)的权限判断,处理消息时的过滤等,这些都是高并发的场景, 可能还会介入客户的代码,所以CEL是一个非常好的选择。 这里列举一下场景:

  • 权限验证:RBAC, ABAC,JWT Claims验证
  • Filter: 尤其是消息和事件的场景,如CloudEvents, EventBridge等
  • HTTP: 对HTTP请求进行过滤、验证和路由
  • 数据处理:主要用于数据过滤和验证

CEL Process

表达式语言(Expression Language)在开发中使用也比较广泛,如Java程序员都非常熟悉的Spring Expression Language - SpEL, 各种模板引擎也都会包含表达式语言,如Velocity,JSP/JSF EL等等,可以说使用场景非常普遍。

除了目标引擎外,还有就是表达式计算场景,如mXparser,如果不是特别复杂的话,那么也可以使用CEL进行基本的数学计算。

CEL & Friends

References