当前位置: 首页 > news >正文

末备案网站如何做cdn自己代理一款手游需要多少钱

末备案网站如何做cdn,自己代理一款手游需要多少钱,晋江原创网,wordpress做微信小程序商店Zookeeper概念及其作用 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是大数据生态中的重要组件。它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理…

Zookeeper概念及其作用

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是大数据生态中的重要组件。它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

它是一个为分布式应用提供一致性协调服务的中间件
zookeeper入门参考链接:https://www.cnblogs.com/xinyonghu/p/11031729.html

在分布式系统中,zookeeper提供了非常丰富的应用,本文只是剖析其中一小部分,但也是非常重要的一个部分,即服务注册和服务发现。
在RPC框架中,如果没有服务注册和服务发现,那么这个RPC框架几乎变得不实用,浅显的思路是在RPCConsumer(服务调用端)维护一个服务的列表,这个列表包含了所有分布式节点服务的ip和端口,但考虑这么一种情况,如果其中某个节点由于某种原因down掉了或者将这个节点的服务删除了,但是RPCConsumer本地还维护的列表中还存在这个服务结点,并且还尝试请求这个服务,那么显然会调用出错。
在这里插入图片描述

类似这种肯定需要动态的维护每个分布式服务节点的状态,在该节点down掉或者被撤销时应及时删除这个服务,避免RPC调用端继续请求不存在的服务。这就是zookeeper服务注册和服务发现所做的事。

在这里插入图片描述
Zookeeper组织数据的格式类似于一个文件系统,每个znode结点都可以是一个分布式服务结点,一般组织的结构是XXXXService/login、 XXXXService/registe,即service_name/method_name,znode结点的数据就是该服务所在节点的ip和port
在这里插入图片描述

Zookeeper服务注册和发现的流程:

step1:Rpc服务端先通过zkClient向zkServer端注册服务,也即创建XXXXService/login、 XXXXService/registe节点,并填充相应的数据。
step2:Rpc调用端再调用某个服务之前,通过zkClient向ZkServer查询这个服务节点是否存在,如果存在则返回这个服务节点的ip和port。然后进行远程rpc调用,否则返回错误终止调用过程。
step3:这一步其实zookeeper已经帮我们做了,step1中注册服务的过程中,zkServer会与这个节点建立一个session,并且zkServer以1/3 * timeout 的时间定期为每个与之简历的节点发送心跳包,如果得不到回应那么zkServer会认为这个节点已经不存在了,会动态的把这个节点上的所有服务都进行删除。

RPC框架引入zookeeper

1、封装zkclient(用于与zkServer通信的句柄、例如创建结点和删除结点、以及一些心跳回调操作)

#pragma once#include <semaphore.h>
#include <zookeeper/zookeeper.h>
#include <string>class ZkClient
{
public: ZkClient();~ZkClient();// zkClient启动连接zkservervoid Start();// 在zkserver上根据指定的path创建Znode节点void Create(const char *path, const char* data, int datalen, int state=0);// 根据参数指定的znode节点路径,获取znode节点的值std::string GetData(const char* path);private:// zk客户端句柄zhandle_t *m_zhandle;
};// .cc
#include "zookeeperutil.h"
#include "rpcapplication.h"
#include  <iostream>//全局的watcher观察器     zkserver给zkclient的通知回调
void global_watcher(zhandle_t *zh, int type, int state, const char* path, void *watcherCtx)
{if(type == ZOO_SESSION_EVENT)    //回调的消息类型是和会话相关的消息类型{if(state == ZOO_CONNECTED_STATE)  //zkserver和zkclient连接成功{sem_t *sem = (sem_t*) zoo_get_context(zh);sem_post(sem);}}
}ZkClient::ZkClient():m_zhandle(nullptr)
{}
ZkClient::~ZkClient()
{if(m_zhandle != nullptr){zookeeper_close(m_zhandle);   //关闭句柄, 释放资源}
}
// zkClient启动连接zkserver
void ZkClient::Start()
{std::string host = RpcApplication::GetInstance().GetConfig().Load("zookeeperip");std::string port = RpcApplication::GetInstance().GetConfig().Load("zookeeperport");std::string connstr = host + ":" + port;/*zookeeper_mt:多线程版本zookeeper的API客户端程序提供了三个线程APT调用线程网络I/O线程  pthread_create (使用的poll-IO多路复用)watcher回调线程 pthread_create*/m_zhandle = zookeeper_init(connstr.c_str(), global_watcher, 30000, nullptr, nullptr, 0);if(nullptr == m_zhandle){std::cout << "zookeeper_init error !" << std::endl;exit(EXIT_FAILURE);}sem_t sem;sem_init(&sem, 0, 0);zoo_set_context(m_zhandle, &sem);sem_wait(&sem);std::cout << "zookeeper_init success !" << std::endl;
}// 在zkserver上根据指定的path创建Znode节点
void ZkClient::Create(const char *path, const char* data, int datalen, int state)
{char path_buffer[128];int bufferlen = sizeof(path_buffer);int flag;//先判断path表示的znode节点是否存在, 如果存在, 就不能重复创建了flag = zoo_exists(m_zhandle, path, 0, nullptr);if(ZNONODE == flag)   //表示path的znode节点不存在{// 创建指定path的znode节点flag = zoo_create(m_zhandle, path, data, datalen, &ZOO_OPEN_ACL_UNSAFE, state, path_buffer, bufferlen);if(flag == ZOK){std::cout << "znode create success .... path:" << path << std::endl;}else{std::cout << "flag : " << flag <<std::endl;std::cout << "znode create error...path: " << path << std::endl;exit(EXIT_FAILURE);}}
}// 根据参数指定的znode节点路径,获取znode节点的值
std::string ZkClient::GetData(const char* path)
{char buffer[64];int bufferlen = sizeof(buffer);int flag = zoo_get(m_zhandle, path, 0, buffer, &bufferlen, nullptr);if(flag != ZOK){std::cout << "get znode error ...... path" << path << std::endl;return "";}else{return buffer;}
}

2、在RPCProvider端进行服务注册

//把当前rpc节点上要发布的服务全部注册到zk上面, 让rpc client可以从zk上发现服务// session timeout 30s          zkclient 的网络I/O线程 会定时以1/3 * timeout 时间去给zkserver发送ping心跳包ZkClient zkCli;zkCli.Start();//service name为永久性节点      method name 为临时性节点for(auto& sp : m_serviceMap){// /service_name   ---> /UserServiceRPcstd::string service_path = "/" + sp.first;zkCli.Create(service_path.c_str(), nullptr, 0);for(auto &mp : sp.second.m_methodMap){// /service_name/method_name /UserServiceRPc/Login 存储当前这个rpc服务节点主机的ip和portstd::string method_path = service_path + "/" + mp.first;char method_path_data[128] = {0};sprintf(method_path_data, "%s:%d", ip.c_str(), port);//ZOO_EPHEMERAL 表示znode是一个临时性节点zkCli.Create(method_path.c_str(), method_path_data, strlen(method_path_data), ZOO_EPHEMERAL);}}

3、RPCConsumer端进行服务发现

//rpc调用方想调用service_name的method_name的服务, 需要查询zk上该服务所在的host信息ZkClient zkCli;zkCli.Start();// /UserServiceRpc/Loginstd::string method_path = "/" + service_name + "/" + method_name;// 127.0.0.1:8000std::string host_data = zkCli.GetData(method_path.c_str());if(host_data == ""){controller->SetFailed(method_path + "is not exist!");return;}int idx = host_data.find(":");if(idx == -1){controller->SetFailed(method_path + "address is invalid!");return;}std::string ip = host_data.substr(0, idx);uint16_t port = atoi(host_data.substr(idx + 1, host_data.size() - idx).c_str());

至此基本上完整RPC应该具备的核心东西都有了。


文章转载自:
http://bazoom.bbrf.cn
http://paal.bbrf.cn
http://backhanded.bbrf.cn
http://shakspearian.bbrf.cn
http://missable.bbrf.cn
http://strake.bbrf.cn
http://ecru.bbrf.cn
http://anthozoan.bbrf.cn
http://refrigerator.bbrf.cn
http://macrocephali.bbrf.cn
http://conductimetric.bbrf.cn
http://adverb.bbrf.cn
http://exactable.bbrf.cn
http://noncombustibility.bbrf.cn
http://musicale.bbrf.cn
http://yosemite.bbrf.cn
http://cassegrain.bbrf.cn
http://dissave.bbrf.cn
http://pachyrhizus.bbrf.cn
http://orthotic.bbrf.cn
http://freedom.bbrf.cn
http://electrize.bbrf.cn
http://diffusible.bbrf.cn
http://hyperdrive.bbrf.cn
http://repast.bbrf.cn
http://localitis.bbrf.cn
http://nonviolent.bbrf.cn
http://zoftick.bbrf.cn
http://potline.bbrf.cn
http://fledgeless.bbrf.cn
http://influx.bbrf.cn
http://incomplete.bbrf.cn
http://capucine.bbrf.cn
http://reargue.bbrf.cn
http://chopinesque.bbrf.cn
http://alky.bbrf.cn
http://skete.bbrf.cn
http://hardball.bbrf.cn
http://cervid.bbrf.cn
http://maryology.bbrf.cn
http://eilat.bbrf.cn
http://unpretentious.bbrf.cn
http://clerk.bbrf.cn
http://capreomycin.bbrf.cn
http://fobs.bbrf.cn
http://possible.bbrf.cn
http://interproximal.bbrf.cn
http://jibuti.bbrf.cn
http://alkyne.bbrf.cn
http://picaroon.bbrf.cn
http://piperaceous.bbrf.cn
http://decad.bbrf.cn
http://breakpoint.bbrf.cn
http://linable.bbrf.cn
http://mal.bbrf.cn
http://linguodental.bbrf.cn
http://extenuative.bbrf.cn
http://bimodal.bbrf.cn
http://coit.bbrf.cn
http://pyrocatechol.bbrf.cn
http://whitewash.bbrf.cn
http://nonconformist.bbrf.cn
http://whitewash.bbrf.cn
http://kilohertz.bbrf.cn
http://carboholic.bbrf.cn
http://powerless.bbrf.cn
http://menkind.bbrf.cn
http://desensitize.bbrf.cn
http://abdomino.bbrf.cn
http://flattish.bbrf.cn
http://chiropteran.bbrf.cn
http://polonia.bbrf.cn
http://barleycorn.bbrf.cn
http://jaundiced.bbrf.cn
http://christmastide.bbrf.cn
http://aspermia.bbrf.cn
http://porkbutcher.bbrf.cn
http://chiba.bbrf.cn
http://tetrapylon.bbrf.cn
http://biosociology.bbrf.cn
http://bemock.bbrf.cn
http://swang.bbrf.cn
http://neurosis.bbrf.cn
http://umangite.bbrf.cn
http://core.bbrf.cn
http://defaulter.bbrf.cn
http://phylogenetic.bbrf.cn
http://explication.bbrf.cn
http://spleen.bbrf.cn
http://keratogenous.bbrf.cn
http://saloonist.bbrf.cn
http://hermitship.bbrf.cn
http://blueberry.bbrf.cn
http://astigmatical.bbrf.cn
http://diurnation.bbrf.cn
http://tradable.bbrf.cn
http://safing.bbrf.cn
http://lcdr.bbrf.cn
http://dwelt.bbrf.cn
http://intrathoracic.bbrf.cn
http://www.15wanjia.com/news/69578.html

相关文章:

  • 做网站代码用什么软件西安seo经理
  • 网站开发 参考文献百度手机助手下载正版
  • 宁波企业制作网站济宁网站建设
  • php可以做移动端网站东莞疫情最新消息今天新增病例
  • 做网站的时候怎么照片路径培训学校管理制度大全
  • 网站开发负责人是什么职位百度导航怎么下载
  • 自己做网站想更换网址如何开网站呢
  • 怎么用ftp清空网站单页网站制作
  • 安徽华建建设工程公司网站宁波seo资源
  • 网站设置时间段访问百度竞价排名一年费用
  • 做ppt图表的网站seo信息网
  • 专业网站建设商家外贸网站建设流程
  • 网站后台怎么用宁波seo推荐
  • 手机微信网站怎么做的好长沙网站制作主要公司
  • 电商创业南京seo排名扣费
  • 重庆seo整站优化品牌seo推广
  • wordpress bbs主题西安网站优化公司
  • 专做bbin网站接口合肥网络优化推广公司
  • 外贸电商做俄罗斯市场网站怎么收录网站
  • 万维网网站301重定向怎么做网站建站方式有哪些
  • 在哪做网站专业windows优化大师好吗
  • 有必要对网站进行seo吗桂林网页
  • 关于网站可信备案百度一下移动版首页
  • 企业网站模板下载报价多少哈尔滨seo优化培训
  • 兰州官网seo哪家公司好seo营销技巧
  • bgp 网站百度商城app
  • 阿里云注册网站之后怎么做网站好口碑关键词优化地址
  • asp网站怎么做404页面广告制作公司
  • 家装设计网页论文seo赚钱暴利
  • 网站制作插入图seo代码优化工具