Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Openstack+Kubernetes+Docker΢·þÎñʵ¼ù֮·--RPC
 
·¢²¼ÓÚ 2017-4-1
  2191  次浏览      31
 

ÖØµãÀ´ÁË£¬±¾ÎÄÈ«Ãæ²ûÊöÒ»ÏÂÎÒÃǵÄRPCÊÇÔõôʵÏÖ²¢ÈçºÎʹÓõ쬏úKubernetesºÍOpenstackÔõô½áºÏ¡£

ÔÚÑ¡ÐÍÒ»ÎÄÖÐ˵µ½ÎÒÃÇÑ¡¶¨µÄRPC¿ò¼ÜÊÇApache Thrift£¬ËüµÄÓ÷¨ÊÇÔÚMain·½·¨ÖÐÖØÆô·þÎñ£¬ÔÚClient¶ËÁ¬½Ó·þÎñÈ¥µ÷Óã¬

¶øÎÒµÄÏë·¨ÊÇÒª¸úDubblo¡¢HSFµÄÓ÷¨Ò»Ñù£¬ÒòΪºÜ¶àÈ˶¼ÊìϰÕâÁ½¸ö¿ò¼ÜµÄÓ÷¨£¬ÌرðÊÇÎÒÃǺü¸¸öÏîÄ¿¶¼ÊÇ»ùÓÚEDAS¿ª·¢µÄ£¬¶øÇÒÊÀÃæÉÏÓÃDubboµÄ¹«Ë¾Ò²ºÜ¶à¡£

˳±ãÔÙ˵һÏÂÎÒÃǶÔÓÚRPCµÄ¼¸µãÒªÇó£º

1£¬¼æÈÝDubboºÍHSFµÄʹÓ÷½·¨£¬Ö§³Ö°æ±¾ºÍ·þÎñ·Ö×飬֧³ÖÏîÄ¿¸ôÀë

2£¬¿Í»§¶ËÖØÊÔ»úÖÆ£¬¿ÉÒÔÅäÖôÎÊýºÍ¼ä¸ôʱ¼ä

3£¬¿Í»§¶ËÏß³Ì

4£¬·þÎñ¶Ë¿ÉÒÔÆ½»¬ÎÞ·ìÉý¼¶¶ø²»Ó°Ïì¿Í»§¶ËµÄʹÓÃ

¼æÈÝDubbo¾Í±ØÈ»ÒªÊ¹ÓÃSpring¿ò¼Ü£¬ÄÇÎÒÃǾÍÖ±½ÓÉÏSpring BootºÃÁË£¬ºÅ³ÆSpring BootΪ΢·þÎñ¿ª·¢¶øÉú£¬Ò»²½µ½Î»£¬½«Thrift¸úSpring BootÕûºÏ¡£

°æ±¾ºÍ·þÎñ·Ö×é¿ÉÒÔͨ¹ýKubernetesµÄServiceµÄLabelÀ´ÊµÏÖ£¬ÎÒÃǿͻ§¶ËÔÚ²éÕÒ·þÎñµÄʱºòͨ¹ýÕâÁ½¸ö±êÇ©ÔÙ¼ÓÉϽӿÚÀàµÄLabelÀ´¶¨Î»ServiceµÄCluster IP£¬ÕâÀï²»Ö±½ÓʹÓÃServiceÃû³ÆÀ´µ÷Ó÷þÎñµÄÔ­ÒòÊÇͨ¹ýLabel²éѯServcie¸ü¼ÓÁé»îһЩ£¬ServiceµÄÃû³Æ²»ÊÜÏÞÖÆ£¬ËæÊ±¿ÉÒÔÆô¶¯Ò»¸ö´øÓÐÏàͬLabelµÄÐÂServiceÀ´Ìæ»»¾ÉµÄService.

ÏîÄ¿¸ôÀë¿ÉÒÔÓÃKubernetesµÄnamespaceÀ´ÊµÏÖ£¬Ò»¸önamespaceÊÇÒ»¸öÏîÄ¿£¬µ±È»ÏîĿ֮¼äÒ²¿ÉÒÔ»¥Ïàµ÷Óã¬Ä¬ÈÏÇé¿öÏÂÊÇÕû¸öKubernetes¼¯ÈºµÄ·þÎñ¶¼ÊÇ¿ÉÒÔ±»µ÷Óõ½µÄÈç¹ûÔÚûÓÐÖ¸¶¨namespaceµÄÇé¿öÏ¡£

¿Í»§¶ËÖØÊÔ»úÖÆÓôúÀíThriftÁ¬½ÓµÄ·½Ê½À´ÊµÏÖ£¬ÔÚÁ¬½Ó»ò½Ó¿Ú·½·¨µ÷ÓÃÒ쳣ʱ·¢ÆðÖØÐÂÁ¬½Ó£¬²Î¿¼£ºhttps://liveramp.com/engineering/reconnecting-thrift-client/

¿Í»§¶ËÁ¬½Ó³ØÊÇÓÉÓÚÔÚWEBÏîÄ¿ÖÐÿ´ÎÓû§·¢ÆðÇëÇóÊÇÔÚÒ»¸ö¶ÀÁ¢µÄÏß³ÌÖУ¬¶øThriftµÄClient SocketÁ¬½Ó²»ÊÇḬ̈߳²È«µÄ£¬Òò´ËҪΪÿ¸öÓû§×¼±¸Ò»¸öSocketÁ¬½Ó£¬ÓеãÏñÊý¾Ý¿âµÄÁ¬½Ó³Ø£¬Õâ¸ö¿ÉÒÔÓÃapacheµÄcommons pool2À´ÊµÏÖ£¬Õâ¸öÓкܶàÍøÓѵÄÎÄÕ¿ÉÒԲο¼£¬±¾ÎľͲ»ÔÚ׸ÊöÁË¡£

·þÎñ¶Ëƽ»¬Éý¼¶¿ÉÒÔʹÓÃKubernetesµÄKubectl rolling-updateÀ´ÊµÏÖ£¬ËüµÄ»úÖÆÊÇÏÈ´´½¨Ò»¸öRC£¬È»ºóн¨Ò»¸öа汾Pod£¬Í£µôÒ»¸ö¾É°æ±¾Pod£¬Öð²½À´Íê³ÉÕû¸öRCµÄ¸üУ¬×îºóɾ³ý¾ÉµÄRC£¬°ÑеÄRCÃû³Æ¸ÄΪ¾ÉµÄRCÃû³Æ£¬Éý¼¶¹ý³ÌÈçÏÂͼ£º

ÕâÀï»áÓÐÒ»¸öÎÊÌ⣬ÒòΪÓÐÒ»¸öʱ¼ä¶Î»áоÉRC¹²´æ£¬ÓÉÓÚServiceÊÇ»ùÓÚRCµÄLabel½¨Á¢µÄ£¬ÄǹýÀ´µÄÇëÇóÊDz»ÊÇ»áµÃµ½Á½ÖÖ½á¹û£¿

Èç¹ûÊǵĻ°Òª·ÀÖ¹ÕâÑùµÄÇé¿ö·¢Éú¾ÍÒªÏñÉÏÃæËµµÄ£¬½«Õû¸öServiceÌæ»»£¬ÏÈÆô¶¯Ò»¸öеÄService¸ú¾ÉµÄServiceÓÐÏàͬLabel£¬È»ºóɾ³ý¾ÉµÄServiceÒÔ¼°RC£¬ÔÚ·¢Éú·þÎñÇëÇóµÄʱºòThrift ClientÔÚÕÒ²»µ½¾ÉµÄ·þÎñµÄʱºò¸ù¾ÝLabelÖØÐ²éÕÒService¾Í»áÇл»µ½ÐµÄServiceÉÏ¡£

ÏÂÃæÕ¹Ê¾Ò»Ï´ó¸ÅµÄʵÏÖ¼°Ê¹Ó÷½·¨£¬¼ÙÉèÄãÊìϰKubernetes»òÕß¼òµ¥Á˽⣬ÊìϰDocker¡£

·þÎñ¶Ë

ÅäÖÃ

  <bean class="io.masir.testcloud.thrift.HelloImpl" id="helloImpl"/>
<bean class="io.masir.testcloud.thrift.ThriftSpringProviderBean" init-method="init" id="providerBean">
<property name="serviceInterface" value="io.masir.testcloud.thrift.HelloService"/>
<property name="serviceVersion" value="1.0.0"/>
<property name="serviceGroup" value="testServiceGroup"/>
<property name="target" ref="helloImpl"/>
</bean>

ThriftSpringProviderBeanºËÐÄ´úÂë ÕâÊÇThriftºÍSpringÕûºÏµÄºËÐÄ´úÂ룬¿ÉÒÔ½è¼øÆäËüÍøÓѵÄThrift SpringʵÀý¡£

public class ThriftSpringProviderBean extends Thread {


private int port = 10809;
private String serviceInterface;
private String serviceVersion;
private String serviceGroup;
private Object target;

public void run() {
try {
TServerSocket serverTransport = new TServerSocket(getPort());
Class Processor = Class.forName(getServiceInterface() + "$Processor");

Class Iface = Class.forName(getServiceInterface() + "$Iface");

Constructor con = Processor.getConstructor(Iface);

TProcessor processor = (TProcessor) con.newInstance(getTarget());

TBinaryProtocol.Factory protFactory = new TBinaryProtocol.Factory(true, true);
TThreadPoolServer.Args args = new TThreadPoolServer.Args(serverTransport);
args.protocolFactory(protFactory);

args.processor(processor);
TServer server = new TThreadPoolServer(args);
logger.info("Starting server on port " + getPort() + " ...");
server.serve();
} catch (TTransportException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}

public void init() {
start();
}

public String getServiceInterface() {
if(serviceInterface.endsWith(".Iface")){
serviceInterface = serviceInterface.replace(".Iface","");
}
return serviceInterface;
}


}

¿Í»§¶Ë

¿¼Âǵ½KubernetesÊÇÓиºÔغͷþÎñ·¢ÏֵŦÄÜ£¬ÄÇÎÒÃÇÈçºÎ¸úThriftÕûºÏÔÚÒ»ÆðʹÓÃÊÇÎÒÃÇÒª½â¾öµÄÎÊÌâ

ÅäÖÃ

<bean class="io.masir.testcloud.thrift.ThriftClientBeanProxyFactory">
<property name="k8sAPIServer" value="http://100.0.1.5:8080/"/>
<property name="interfaceName" value="io.masir.testcloud.thrift.HelloService"/>
<property name="version" value="0.0.1"/>
<property name="group" value="thrifttest"/>
</bean>

k8sAPIServer ÊÇKubernetesµÄAPIµØÖ·£¬ÓÃÀ´¸ù¾Ý group¡¢version¡¢interfaceName Èý¸ö²ÎÊý²éÕÒ·þÎñµÄ¼¯ÈºµØÖ·

ThriftClientBeanProxyFactory µÄʵÏÖÇë²Î¿¼ http://blog.csdn.net/muyuxuebao/article/details/51556066 £¬°üÀ¨ÖØÐ»úÖÆÒ²ÓÐÁË¡£

ÁíÍâÍÆ¼öÒ»¸öKubernetes Api·ÃÎʵÄJava×é¼þ£¬·Ç³£ºÃÓúÍÁé»î


<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<version>1.4.14</version>
</dependency>

Éú³ÉImage

·þÎñµÄDockerfile

FROM  registry2.io/public/java:7
Copy jn-boot-0.0.1.jar /jn-boot.jar
EXPOSE 10809
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo Asia/Shanghai > /etc/timezone
ENV TZ Asia/Shanghai
ENTRYPOINT java -jar /jn-boot.jar

Ïû·ÑÕßDockerfile

FROM  registry2.io/public/java:7
COPY jn-boot-client-0.0.2.jar /jn-boot-client.jar
EXPOSE 10809
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo Asia/Shanghai > /etc/timezone
ENV TZ Asia/Shanghai
ENTRYPOINT java -jar /jn-boot-client.jar

ÐèÒªÓÐÁ½¸öµØ·½×¢Òâһϣ¬Ê¹ÓÃCopy£¬Ã¿´Î¶¼Òª¸²¸Ç¿½±´µ½ImageÖУ¬ÁíÒ»¸öÊÇÈÕÆÚÓ¦¸Ã·ÅÔÚ»ù´¡ImageÖУ¬BuildÉú³ÉImageºóPushµ½ÎÒÃÇRegistryÖС£

²¿Êðµ½Kubernetes

³ÌÐò¿ª·¢»òÕß˵¿ª·¢Ë¼Â·»ù±¾ÊµÏÖÁË£¬ÏÂÃæ¾ÍÊDz¿ÊðÉÏÏß²âÊÔ£¬KubernetesµÄPods»ùÓÚDockerÔËÐУ¬ÄǾͻáÓõ½Registry£¬Ò»¸öPod»áÊÇÒ»¸öDockerÈÝÆ÷£¬ËùÒÔKubernetesµÄÁ÷³ÌÊÇ´ÓRegistryÖÐÄõ½ImageÈ»ºóÆô¶¯Ò»¸öDokcerÈÝÆ÷£¬ÓÉÓÚÎÒÃÇÅäÖõÄRegistryÊÇÓÐȨÏ޵ģ¬ËùÒÔÒªÏÈÉú³ÉKubernetesµÄSecrets£¬

kubectl create secret docker-registry registry2key --docker-server=registry2.io
 --docker-username=admin --docker-password=1 --docker-email=xxxx@163.com --namespace=thrift-demo

È»ºóÔÚyamlÖÐÅäÖãº

apiVersion: v1
kind: ReplicationController
metadata:
name: thrift-c
namespace: thrift-demo
spec:
replicas:1
selector:
app: thrift-c
template:
metadata:
name: thrift-c
labels:
app: thrift-c
spec:
containers:
- name: thrift-c
image: registry2.io/thrift/thrift-c:0.0.2
imagePullPolicy: Always
ports:
- containerPort: 9091
imagePullSecrets:
- name: registry2key

×¢ÒâÀïÃæµÄ imagePullSecrets registry2key

{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "thrift-c-app",
"namespace": "thrift-demo"
},
"spec": {
"selector": {
"app": "thrift-c"
},
"ports": [
{
"protocol": "TCP",
"port": 9091,
"targetPort": 9091
}
]
}
}

KubernetesµÄÅäÖÃÍøÉÏÓкܶ࣬´ó¼Ò·ÖÍ·È¥²Î¿¼£¬ÕâÀï²»¹ý¶à˵Ã÷£¬ÕâÊÇÒ»¸öThrift¿Í»§¶ËµÄKubenetes RCºÍServiceÅäÖã¬ÔÚKubernetes MasterÔÆÖ÷»úÉÏͨ¹ýKubectlÔËÐв¢Æô¶¯Õâ¸öRC

ÁíÍ⻹ÐèÒª²¿ÊðThrift·þÎñ¶ËµÄRC¡¢Service£¬Èçͼ£º

 

£¨Çë×¢Òâ·þÎñ¶ËµÄServiceµÄLabel£©

ÏÂÃæÊÇReplication Controllers

µ÷ÓòâÊÔ£¬²é¿´·þÎñµÄ·ÃÎʵØÖ·£¬ÎÒÃǵĿͻ§¶Ë·þÎñʹÓõÄÊÇNodeport£¬²é¿´NodeportµÄ·½Ê½£¬»òÕßÔÚDashboardÉϲ鿴

È»ºóͨ¹ýKubernetes¼¯ÈºÖеÄÈÎÒâһ̨»úÆ÷¼ÓÉÏNodePort¶Ë¿Ú¾Í¿ÉÒÔ·ÃÎÊÎÒÃǵÄThrift¿Í»§¶Ë·þÎñÁË¡£

ÔÚ±¾ÎÄÖÐÎÒÃÇ¿ÉÒÔ¿´µ½Ê¹ÓÃÁË´óÁ¿µÄKubernetesÌØÐÔ£¬·þÎñ·¢ÏÖ¡¢·þÎñ¸ºÔØ£¨»ùÓÚService£©¡¢¹ö¶¯Éý¼¶µÈµÈ£¬ÆäÖзþÎñ·¢ÏÖÊÇÔÚÎÒÃÇÌí¼ÓÁËPodsÊýÁ¿ºó»á±»Service×Ô¶¯·¢ÏÖ£¬°üÀ¨ºóÃæÒªËµµÄ×Ô¶¯À©ÈÝ£¬¶ø¸ºÔؾÍÊÇService»áÔÚËùÓÐPodsÖÐͨ¹ýijÖÖ»úÖÆÑ¡Ôñij¸öPodÀ´µ÷Óã¬ÊÂʵÉÏ»¹ÓкܶàKubernetesµÄÌØÐԵȴýÎÒÃÇȥʹÓúͷ¢¾ò£¬KubernetesÕæÊÇÒ»¸öµÃÁ¦µÄÈÝÆ÷ÖúÊÖ£¬Ï£ÍûÎÒÃÇÄܰÑËüÓúã¬Ò²Ï£ÍûKubernetesÔ½À´Ô½ÍêÉÆ¡£

ÔÚÏÂÎÄÖÐÎÒÃǽ«ËµÒ»Ëµ·þÎñµÄ·¢²¼£¬×ܲ»Äܶ¼Í¨¹ýIP+NodePortµÄ·½Ê½À´·ÃÎÊËùÓÐWEB·þÎñ°É£¬Ò»¶¨ÒªÓÐÒ»¸öÍêÃÀµÄºÏÊʵĽâ¾ö°ì·¨£¬ÄÇ»áÊÇÊ²Ã´ÄØ¡£¡£¡£

   
2191 ´Îä¯ÀÀ       31
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þµÄ˼¿¼
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS
Ïà¹ØÅàѵ¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
Windows Azure ÔÆ¼ÆËãÓ¦ÓÃ

ĦÍÐÂÞÀ­ ÔÆÆ½Ì¨µÄ¹¹½¨ÓëÓ¦ÓÃ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ù
ijÑз¢ÖÐÐÄ Openstackʵ¼ù
ÖªÃûµç×Ó¹«Ë¾ ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦ÓÃ
ijµçÁ¦ÐÐÒµ »ùÓÚÔÆÆ½Ì¨¹¹½¨ÔÆ·þÎñ
ÔÆ¼ÆËãÓëWindows AzureÅàѵ
±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ