service详解

一、service(智能负载均衡器)

service主要是提供负载均衡和服务自动发现。它是 k8s 中最核心的资源之一, 每一个 Service 就是我们平常所说的一个“微服务”。命名空间级资源
在这里插入图片描述
如上图所示,Kubernetes 的 Service 定义了一个服务的访问入口,前端的应用(Pod)通过这个入口地址访 问其背后的一组由 Pod 副本组成的集群实例,Service 与其后端的 Pod 副本集群之间是通过 Label 来 实现关联的,而 Deployment 则是保证 Service 的服务能力和服务质量始终处于预期的标准。

通过分析,识别并建模系统中的所有服务为微服务,最终我们的系统是由多个提供不同业务能力而彼此独立 的微服务单元所组成,服务之间通过 TCP/IP 进行通信,从而形成了强大而又灵活的弹性网络,拥有强大的分布 式能力、弹性扩展能力、容错能力。

vim service.yaml
apiVersion: v1
kind: Service
metadata:
  name: service
spec:
  selector:
    release: stable
  ports:
    - name: http
      #负载均衡端口
      port: 80
      #容器内端口
      targetPort: 80
      #网络代理的类型默认tcp
      protocol: "TCP"
    - name: https
      port: 443
      targetPort: 443
      protocol: "TCP"

二、service的工作方式

在 Kubernetes 迭代过程中,给 Service 设置里三种工作方式,分别是:Userspace 方式、Iptables 以及 Ipvs, 这三种方式到现在为止,官方推荐使用 IPVS, 当集群不支持 IPVS 的时候,集群会降级到 Iptables。

2.1.userspace

Client Pod 要访问 Server Pod 时,它先将请求发给本机内核空间中的 service 规则,由它再将请求,转给监听 在指定套接字上的 kube-proxy,kube-proxy 处理完请求,并分发请求到指定 Server Pod 后,再将请求递交给内 核空间中的 service,由 service 将请求转给指定的 Server Pod。由于其需要来回在用户空间和内核空间交互通信, 因此效率很差
在这里插入图片描述

2.2.Iptables 模型 (软件转发)

直接由内核中的 iptables 规则,接受 Client Pod 的请求,并处理完成后,直接转发给指定 ServerPod。这 种方式不再将请求转发给 kube-proxy,性能提升很多。
在这里插入图片描述

2.3.Ipvs 模型 (内核转发)

在 ipvs 模式下,kube-proxy 监视 Kubernetes 服务和端点,调用 netlink 接口相应地创建 IPVS 规则, 并 定期将 IPVS 规则与 Kubernetes 服务和端点同步。 该控制循环可确保 IPVS 状态与所需状态匹配。 访问服务 时,IPVS 将流量定向到后端 Pod 之一。 IPVS 代理模式基于类似于 iptables 模式的 netfilter 挂钩函数,但是使用哈希表作为基础数据结构,并且 在内核空间中工作。 这意味着,与 iptables 模式下的 kube-proxy 相比,IPVS 模式下的 kube-proxy 重定向 通信的延迟要短,并且在同步代理规则时具有更好的性能。与其他代理模式相比,IPVS 模式还支持更高的网络 流量吞吐量。
在这里插入图片描述
总结:kube-proxy 都通过 watch 的方式监控着 kube-APIServer 写入 etcd 中关于 Pod 的最新状态 信息,它一旦检查到一个 Pod 资源被删除了 或 新建,它将立即将这些变化,反应在 iptables 或 ipvs 规则中, 以便 iptables 和 ipvs 在调度 Clinet Pod 请求到 Server Pod 时,不会出现 Server Pod 不存在的情况。 自 k8s1.1 以后,service 默认使用 ipvs 规则,若 ipvs 没有被激活,则降级使用 iptables 规则. 但在 1.1 以前, service 使用的模式默认为 userspace。

三、service的类型

Service 是 Kubernetes 对外访问的窗口,针对不同的场景,kubernetes 为我们设置了四种 Service 的类型。

3.1.ClusterIp(向集群内部暴露一个ip)

kubernetes 默认就是这种方式,是集群内部访问的方式,外部是无法访问的。其主要用于为集群内 Pod 访 问时,提供的固定访问地址,默认是自动分配地址,可使用 ClusterIP 关键字指定固定 I

<think>好的,我现在需要回答用户关于“Android Service详解”的问题。首先,我得回想一下Android中Service的基本概念和用法。Service是Android四大组件之一,用于执行长时间运行的操作,不与用户交互。接下来,我需要分几个方面来详细解释。 首先,Service的基本概念,比如它没有用户界面,适合处理后台任务。然后,生命周期,和Activity不同,Service的生命周期方法如onCreate、onStartCommand、onBind、onDestroy,这些需要详细说明。 接下来是启动方式,分为启动服务(startService)和绑定服务(bindService)。启动服务通过startService方法启动,生命周期独立于启动它的组件;绑定服务则通过bindService绑定到某个组件,生命周期与绑定者相关。可能需要举例子说明两者的区别。 然后是Service的类型,比如前台服务和后台服务。前台服务需要通知用户,优先级高,适合长时间运行的任务,比如音乐播放。而后台服务可能被系统更早地终止。这里需要提到如何创建前台服务,比如使用startForeground方法。 还要提到Service的线程问题,Service默认在主线程运行,如果执行耗时操作需要自己创建子线程,否则会导致ANR。可能需要提醒开发者注意这一点。 另外,可能需要比较Service和Thread的区别,说明Service适合长时间运行且与系统生命周期结合,而Thread只是普通的Java线程,适合临时任务。 最后,给出一个简单的代码示例,展示如何创建一个Service,重写onStartCommand和onBind方法,以及如何启动和停止Service。可能需要提醒在AndroidManifest.xml中声明Service。 现在需要检查是否有遗漏的部分,比如Service的绑定机制、AIDL、远程Service或者IntentService等。不过用户可能只需要基础详解,所以可以暂时不深入这些高级话题,但可以作为相关问题提出来。 然后,根据用户的要求,在回答末尾生成3-5个相关问题,比如Service生命周期、绑定机制、与IntentService的区别、前台服务实现等。确保问题相关且有深度。 最后,确保回答符合格式要求,没有使用Markdown,代码示例正确,相关问题部分正确放置在末尾,并且没有换行分散。检查是否有语法错误,确保内容准确。</think>Android中的Service是一种没有用户界面且可长期运行的组件,主要用于执行后台任务或跨进程通信。以下是关键点解析: 1. **生命周期** - `onCreate()`:首次创建时调用,仅执行一次 - `onStartCommand(Intent, int, int)`:通过startService启动时调用,可多次执行 - `onBind(Intent)`:通过bindService绑定时调用,返回IBinder对象 - `onUnbind(Intent)`:解除绑定时调用 - `onDestroy()`:销毁前调用 2. **启动方式** - **启动服务**:`startService()`独立运行,需手动调用`stopSelf()`或`stopService()`停止 - **绑定服务**:`bindService()`与组件绑定,组件销毁时自动解绑 3. **线程管理** 默认在主线程运行,执行网络请求等耗时操作需手动创建子线程: ```java public class MyService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { new Thread(() -> { // 执行后台任务 }).start(); return START_STICKY; } // 其他生命周期方法... } ``` 4. **前台服务** 需创建通知并调用`startForeground()`: ```java Notification notification = new Notification.Builder(this, CHANNEL_ID) .setContentTitle("服务运行中") .setSmallIcon(R.drawable.ic_notification) .build(); startForeground(1, notification); ``` 5. **跨进程通信** 通过AIDL接口实现,需定义.aidl文件并实现接口方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值