XXL-JOB:轻量级分布式任务调度框架

需积分: 41 43 下载量 111 浏览量 更新于2024-08-08 收藏 5.09MB PDF 举报
"开源协议和版权-beautiful evidence --- pdf版" 这篇文档主要讨论了开源协议和版权问题,以及与XXL-JOB这个分布式任务调度平台的相关内容。XXL-JOB是一个轻量级的框架,旨在提供快速开发、易于学习和扩展的分布式任务调度解决方案。 首先,文档提到了项目贡献的部分,鼓励用户参与到项目中来,可以通过提交Pull Request (PR)来修复bug,或者创建Issue来讨论新功能和变更。这种开放的社区文化是开源项目的核心,它促进了项目的持续发展和改进。 其次,文档鼓励用户在特定的登记地址进行登记,尤其是那些希望接入该项目的公司。这种登记主要是为了产品的推广,有助于扩大项目的影响力和用户基础。 接着,文档明确了开源协议和版权信息。XXL-JOB遵循GNU General Public License (GPL) v3,这是一个广泛使用的开源软件许可证,它要求任何派生作品都必须以同样的开源形式发布,保护了用户的自由使用、修改和分发的权利。同时,文档声明了该产品的版权归属于2015年至今的xuxueli。 XXL-JOB作为一个分布式任务调度平台,其特点包括: 1. 简单易用:提供了Web界面,使得任务的创建、读取、更新和删除操作变得直观且快速,用户可以在短时间内熟悉并开始使用。 2. 动态管理:支持实时修改任务状态,可以暂停、恢复任务,甚至终止正在运行的任务,这些更改立即生效。 3. 调度中心高可用:调度中心基于集群的Quartz实现,支持集群部署,确保调度中心的高可用性。 4. 执行器高可用:任务可以在分布式环境中执行,执行器支持集群部署,保证任务执行的高可用。 5. 注册中心:执行器会周期性自动注册任务,调度中心能自动发现并触发执行。手动录入执行器地址也是可行的。 6. 弹性扩展:当执行器集群有增减时,下次调度时会自动调整任务分配。 7. 路由策略:在执行器集群中,有多种路由策略可供选择,如第一个、最后一个、轮询、随机等,以适应不同的场景需求。 8. 故障转移和忙碌转移:当出现故障或执行器忙碌时,任务可以自动转移到其他执行器,确保任务的连续执行。 XXL-JOB的这些特性使得它成为一个灵活且可靠的分布式任务调度解决方案,适用于各种需要任务调度的业务场景。用户可以根据自己的需求,轻松地接入和使用这个框架,同时也能够参与到项目的改进和扩展中去,共同推动其发展。

逐行详细解释: void DstExistenceFusion::UpdateWithoutMeasurement(const std::string &sensor_id, double measurement_timestamp, double target_timestamp, double min_match_dist) { SensorObjectConstPtr camera_object = nullptr; if (common::SensorManager::Instance()->IsCamera(sensor_id)) { camera_object = track_ref_->GetSensorObject(sensor_id); UpdateToicWithoutCameraMeasurement(sensor_id, measurement_timestamp, min_match_dist); } SensorObjectConstPtr lidar_object = track_ref_->GetLatestLidarObject(); SensorObjectConstPtr camera_object_latest = track_ref_->GetLatestCameraObject(); SensorObjectConstPtr radar_object = track_ref_->GetLatestRadarObject(); if ((lidar_object != nullptr && lidar_object->GetSensorId() == sensor_id) || (camera_object_latest != nullptr && camera_object_latest->GetSensorId() == sensor_id) || (radar_object != nullptr && radar_object->GetSensorId() == sensor_id && lidar_object == nullptr && camera_object_latest == nullptr)) { Dst existence_evidence(fused_existence_.Name()); double unexist_factor = GetUnexistReliability(sensor_id); base::ObjectConstPtr obj = track_ref_->GetFusedObject()->GetBaseObject(); double dist_decay = ComputeDistDecay(obj, sensor_id, measurement_timestamp); double obj_unexist_prob = unexist_factor * dist_decay; existence_evidence.SetBba( {{ExistenceDstMaps::NEXIST, obj_unexist_prob}, {ExistenceDstMaps::EXISTUNKNOWN, 1 - obj_unexist_prob}}); // TODO(all) hard code for fused exist bba const double unexist_fused_w = 1.0; double min_match_dist_score = min_match_dist; // if (!sensor_manager->IsCamera(sensor_id)) { // min_match_dist_score = std::max(1 - min_match_dist / // options_.track_object_max_match_distance_, 0.0); // } ADEBUG << " before update exist prob: " << GetExistenceProbability() << " min_match_dist: " << min_match_dist << " min_match_dist_score: " << min_match_dist_score; fused_existence_ = fused_existence_ + existence_evidence * unexist_fused_w * (1 - min_match_dist_score); ADEBUG << " update without, EXIST prob: " << GetExistenceProbability() << " 1 - match_dist_score: " << 1 - min_match_dist_score << " sensor_id: " << sensor_id << " dist_decay: " << dist_decay << " track_id: " << track_ref_->GetTrackId(); } UpdateExistenceState(); }

2023-06-02 上传