searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

关于cdn支持无损reload分频道

2023-09-13 01:47:50
6
0

   CDN网络,用于加速用户获取的资源, 并且减少内容源站的负载,边缘节点会承接大量的加速频道,但不同的加速频道对应的需求各不相同,需要的业务场景也不一样,就需要对不同的频道提供个性化服务。 所以需要提供一种分频道配置,类似nginx的 block 块配置,来隔离不同的频道配置,配置更新又不影响其他的频道配置,来提高服务稳定性。

   解决上述的问题,一般需要解决几个场景。

1:  存在大量的加速频道,不同的频道但存在大量的相同的配置项,如何避免冗余配置数据。

2:解析分频道配置时,如何不影响主线程的服务。

3:单加速频道的配置更新,如何不影响其他频道的配置,提高服务稳定性。

4.  单客户存在多个加速域名的情况下,如何减少配置文件。

5.  更改频道配置,如何解决新旧请求对频道配置的引用

 

 

1:首先可以先设计一个分频道子类,每个分频道就生成一个 channelConfig 对象,设计一个hashTable 来实现不同分频域名映射channelConfig的关系。

struct ChannelConfig {

  // 配置项类型
  struct Item {
   ... 
  };

  ChannelConfigs() : { memset(_items, 0, sizeof(_items)); };
  bool parse_file(const char *filename);

  char *_key;
  volatile int _rec_count;  ==> 当前分频道配置的引用个数

  ...  ==> 其他
};

2:每次请求都将引用同个 channelConfig 对象,避免内存占用,每次进行配置变更都需要进行减少计数引用 rec_count 变量, 要是为0时,说明可以释放了.

3:  需要采用读写锁的方式,来对整个 hashTable 进行锁定,避免对应的占用锁导致性能下降

4:需要开辟一个独立的线程进行解析分频道配置,当解析完成后, 在进行更新 hashTable 的数据.

5:  提供一个类似 *.test.com的正则匹配的分频道配置文件,进而使得同个客户存在多个相同业务使用相同的后缀域名,使用同一个分频道配置。

6:提炼公共的配置项,存放在一个公共配置文件,对所有加速域名都生效,当在获取到请求 host 域名相关的信息时,需要进行一次查找分频道配置,用来将分频道配置的内容值覆盖公共配置的配置值,使得配置生效。

0条评论
0 / 1000
谢****裕
3文章数
0粉丝数
谢****裕
3 文章 | 0 粉丝
谢****裕
3文章数
0粉丝数
谢****裕
3 文章 | 0 粉丝
原创

关于cdn支持无损reload分频道

2023-09-13 01:47:50
6
0

   CDN网络,用于加速用户获取的资源, 并且减少内容源站的负载,边缘节点会承接大量的加速频道,但不同的加速频道对应的需求各不相同,需要的业务场景也不一样,就需要对不同的频道提供个性化服务。 所以需要提供一种分频道配置,类似nginx的 block 块配置,来隔离不同的频道配置,配置更新又不影响其他的频道配置,来提高服务稳定性。

   解决上述的问题,一般需要解决几个场景。

1:  存在大量的加速频道,不同的频道但存在大量的相同的配置项,如何避免冗余配置数据。

2:解析分频道配置时,如何不影响主线程的服务。

3:单加速频道的配置更新,如何不影响其他频道的配置,提高服务稳定性。

4.  单客户存在多个加速域名的情况下,如何减少配置文件。

5.  更改频道配置,如何解决新旧请求对频道配置的引用

 

 

1:首先可以先设计一个分频道子类,每个分频道就生成一个 channelConfig 对象,设计一个hashTable 来实现不同分频域名映射channelConfig的关系。

struct ChannelConfig {

  // 配置项类型
  struct Item {
   ... 
  };

  ChannelConfigs() : { memset(_items, 0, sizeof(_items)); };
  bool parse_file(const char *filename);

  char *_key;
  volatile int _rec_count;  ==> 当前分频道配置的引用个数

  ...  ==> 其他
};

2:每次请求都将引用同个 channelConfig 对象,避免内存占用,每次进行配置变更都需要进行减少计数引用 rec_count 变量, 要是为0时,说明可以释放了.

3:  需要采用读写锁的方式,来对整个 hashTable 进行锁定,避免对应的占用锁导致性能下降

4:需要开辟一个独立的线程进行解析分频道配置,当解析完成后, 在进行更新 hashTable 的数据.

5:  提供一个类似 *.test.com的正则匹配的分频道配置文件,进而使得同个客户存在多个相同业务使用相同的后缀域名,使用同一个分频道配置。

6:提炼公共的配置项,存放在一个公共配置文件,对所有加速域名都生效,当在获取到请求 host 域名相关的信息时,需要进行一次查找分频道配置,用来将分频道配置的内容值覆盖公共配置的配置值,使得配置生效。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0