首页 文章 精选 留言 我的

精选列表

搜索[多分片],共10000篇文章
优秀的个人博客,低调大师

DataGrip 2019.3 EAP 4 发布,多引擎数据库环境

DataGrip 2019.3 的第四个早期访问计划发布了,主要更新内容如下: DBE-7976:现在可以从数据编辑器上下文中使用“修改表”操作,如果要在编辑表数据时添加新列,只需按 Ctr/Cmd+F6 继续。 DBE-9336: Intentions 现在在例程的源代码中起作用。例如,如果要通过星号上的 Alt+Enter 扩展通配符,现在就可以这样做。 DBE-9548:现在,如果结果集包含具有相同名称的多个列,那么从中创建表就不会对歧义名称造成任何问题。 DBE-9428:引入了新的意图,以帮助将 JOIN ON 转换为 JOIN USING,反之亦然。 发布公告: https://blog.jetbrains.com/datagrip/2019/11/15/datagrip-2019-3-eap-4/

优秀的个人博客,低调大师

【转载】时隔一年多,我又用起了 Superset

去年 6 月份在流利说提离职后,leader 问我为什么要走。我说,流利说有很健全的数据处理基础设施,但这不是所有的公司都会有的条件,所以我想看看在一个基建不全的创业公司我是否也可以像现在一样做的好。 7 月份正式离职到了现在的公司,一开始靠数着运营后台的订单,看着公众号后台的涨粉,配合友盟拿到的分享数据,拉了张 EXCEL 大表就开始预测着未来的营收支出。在业务蒸蒸日上的时候,给出的预测结果表现的也是很让人满意,隔壁公司的黄老板还天天跑来串门问怎么预测的。 预测的结果看起来十分的美好,但是它其实需要有很多的前提假设成立才能站得住脚,比如用户大体的表现是一致的,又比如投放成本不会过高,再比如微信不会打击朋友圈打卡。所以我迫切的希望了解事实是否像我们假设的那般美好,我开始提议希望能在这家公司建立第一套数据基建 —— 自采集埋点配合数据库

优秀的个人博客,低调大师

Spring Cloud Gateway 扩展支持多版本控制及灰度发布

灰度发布 什么是灰度发布,概念请参考,我们来简单的通过下图来看下,通俗的讲: 为了保证服务升级过程的平滑过渡提高客户体验,会一部分用户 一部分用户递进更新,这样生产中会同时出现多个版本的客户端,为了保证多个版本客户端的可用需要对应的多个版本的服务端版本。灰度发布就是通过一定策略保证 多个版本客户端、服务端间能够正确对应。 所谓灰度发布,即某个服务存在多个实例时,并且实例版本间的版本并不一致,通过 实现方案 nginx + lua (openresty) Netflix Zuul 只需要自定义ribbon 的断言即可,核心是通过TTL 获取上下请求header中的版本号 @Slf4j public class MetadataCanaryRuleHandler extends ZoneAvoidanceRule { @Override public AbstractServerPredicate getPredicate() { return new AbstractServerPredicate() { @Override public boolean apply(PredicateKey predicateKey) { String targetVersion = RibbonVersionHolder.getContext(); RibbonVersionHolder.clearContext(); if (StrUtil.isBlank(targetVersion)) { log.debug("客户端未配置目标版本直接路由"); return true; } DiscoveryEnabledServer server = (DiscoveryEnabledServer) predicateKey.getServer(); final Map<String, String> metadata = server.getInstanceInfo().getMetadata(); if (StrUtil.isBlank(metadata.get(SecurityConstants.VERSION))) { log.debug("当前微服务{} 未配置版本直接路由"); return true; } if (metadata.get(SecurityConstants.VERSION).equals(targetVersion)) { return true; } else { log.debug("当前微服务{} 版本为{},目标版本{} 匹配失败", server.getInstanceInfo().getAppName() , metadata.get(SecurityConstants.VERSION), targetVersion); return false; } } }; } } 维护请求中的版本号 public class RibbonVersionHolder { private static final ThreadLocal<String> context = new TransmittableThreadLocal<>(); public static String getContext() { return context.get(); } public static void setContext(String value) { context.set(value); } public static void clearContext() { context.remove(); } } Spring Cloud Gateway 中实现 第一反应,参考zuul 的实现,自定义断言,然后从上下中获取版本信息即可。但由于 spring cloud gateway 是基于webflux 的反应式编程,所以传统的TTL或者 RequestContextHolder 都不能正确的维护上下文请求。 先来看 spring clou的 gateway 默认的lb 策略实现 LoadBalancerClientFilter public class LoadBalancerClientFilter implements GlobalFilter, Ordered { @Override public int getOrder() { return LOAD_BALANCER_CLIENT_FILTER_ORDER; } @Override @SuppressWarnings("Duplicates") public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { return chain.filter(exchange); } protected ServiceInstance choose(ServerWebExchange exchange) { return loadBalancer.choose( ((URI) exchange.getAttribute(GATEWAY_REQUEST_URL_ATTR)).getHost()); } } 我们只需要重写 choose 方法,把上下文请求传递到路由断言中即可,如下 @Override protected ServiceInstance choose(ServerWebExchange exchange) { HttpHeaders headers = exchange.getRequest().getHeaders(); return loadBalancer.choose(((URI) exchange.getAttribute(GATEWAY_REQUEST_URL_ATTR)).getHost(), headers); } 然后在路由断言中通过 PredicateKey获取到即可 public abstract class AbstractDiscoveryEnabledPredicate extends AbstractServerPredicate { /** * {@inheritDoc} */ @Override public boolean apply(@Nullable PredicateKey input) { return input != null && input.getServer() instanceof NacosServer && apply((NacosServer) input.getServer(), (HttpHeaders) input.getLoadBalancerKey()); } } 最后根据版本来计算 public class GrayMetadataAwarePredicate extends AbstractDiscoveryEnabledPredicate { @Override protected boolean apply(NacosServer server, HttpHeaders headers) { PigxRibbonRuleProperties ribbonProperties = SpringContextHolder.getBean(PigxRibbonRuleProperties.class); if (!ribbonProperties.isGrayEnabled()) { log.debug("gray closed,GrayMetadataAwarePredicate return true"); return true; } final Map<String, String> metadata = server.getMetadata(); String version = metadata.get(CommonConstants.VERSION); // 判断Nacos服务是否有版本标签 if (StrUtil.isBlank(version)) { log.debug("nacos server tag is blank ,GrayMetadataAwarePredicate return true"); return true; } // 判断请求中是否有版本 String target = headers.getFirst(CommonConstants.VERSION); if (StrUtil.isBlank(target)) { log.debug("request headers version is blank,GrayMetadataAwarePredicate return true"); return true; } log.debug("请求版本:{} ,当前服务版本:{}", target, version); return target.equals(version); } } 整合nacos 结合nacos的动态配置可以非常方便的实现灰度

优秀的个人博客,低调大师

【ECS最佳实践】使用多块云硬盘构建RAID组

1.RAID简介 RAID是将多个独立的磁盘按照一定的方式组成1个磁盘阵列组,相比单个磁盘能够有效的提高磁盘的容量、带宽以及可靠性和可用性。 说明: 1.不建议对云盘采用RAID5 和RAID6模式,这些RAID模式的奇偶校验数据会占用一定的IOPS,从而造成性能的损失 2.建议创建RAID0,RAID1模式,并使用相同分区大小,以减少云盘空间的浪费 如下是常见的RAID配置选项: 配置 优点 劣势 使用场景 RAID0 I/O在卷内以条带化的方式分布在各个磁盘上。增加云盘空间会直接增加吞吐量。存储空间等于各个云盘之和 没有数据冗余能力,单个云盘的损坏有可能造成整个虚拟盘数据丢失 对 I/O 性能要求很高,并且已通过其他方式对数据进行备份处理或者不需要进行数据备份的场景 RAID1 数据以镜像的方式存储在各个磁盘上。虚拟盘的存储空间大小取决于RAID组内容

优秀的个人博客,低调大师

多图:多样化实现App多渠道统计

熟悉App开发和推广流程的小伙伴都知道,开发一款App只是第一步,App想要上架应用市场进行下载推广,还要面临繁琐的渠道打包工作,给每一个应用市场打一个对应的渠道包,是统计渠道数据的关键。 现在市场上至少有十余家主流安卓应用市场,这意味着Android工程师至少需要打十几个包,在较少渠道的时候还能应付得过来,但在面对上千个渠道的时候,还需要再打上千个包,效率自然非常的低,甚至还有被抓包的可能,存在一定的数据误差风险。此外,客户端还需要把收集来的渠道码通过接口发送给服务端,以便运营人员统计渠道的安装数据,开展下一步的运营推广。 目前市场上确实有一款工具能完美替代手工多渠道打包的传统方式,那就是openinstall,这是一款专做渠道来源追踪技术的工具,但它在渠道统计方面同样有独到之处。它的优点在于,Android工程师不需要打渠道包,只需要集成一个标准包就能精确的进行渠道统计,并且同时支持Android和iOS系统。 可以登录openinstall官网:www.openinstall.io注册账号可以免费测试体验以下的渠道统计功能。 一、解决渠道打包和统计 如何解决多渠道打包问题呢?首先后台上传一些主流应用市场渠道到openinstall,这里主要的功能是:每个渠道的H5落地页可以自定义输入,这确保了每个渠道数据的精准性和独立性;创建方式也可以选择“单个创建”或“批量创建”。 接着我们可以从渠道报表中看到,openinstall为每一个渠道都提供了“访问量、点击量、安装量、注册量、充值金额以及所有数据的排重量”,并且这些数据都能实时更新,理论上没有弄虚作假的可能。 最后我们只要在操作按钮中导出相应的应用市场渠道包,报表中所有的数据都能精准获取,只需要简单导入导出,手工多渠道打包和服务端数据统计问题就能轻松解决,简单、高效、直接。 二、细化独立渠道数据 渠道报表中的访问量和点击量还能应用在地推或广告方面的数据统计,打个比方:我们通过openinstall中的渠道管理系统给以下地推人员分别创建一个推广渠道,然后在这里单独生成、分配一个渠道链接或二维码,地推人员以此进行推广,后台就能实时获悉每个地推渠道的“访问量(落地页点击量)、点击量(下载按钮点击量)、安装量、注册量”等。 openinstall甚至可以给每一个地推人员生成单独的报表,报表中包含该渠道的深度统计数据:“访问量、点击量、安装量、注册量、1日留存、7日留存、30日留存”等,这些数据同样可以实时监控,这样一来,渠道留存和增长趋势都能及时得到反馈。 三、驾驭海量渠道数据 在大型活动拓展、海量渠道推广的过程中,App整体的推广效益更值得观察,openinstall的应用统计功能也兼具了App完整的数据统计功能,包括“访问量、点击量、安装量、注册量、1日留存、7日留存、30日留存”等,即使在渠道量大、用户量大的情况下,也完全不用担心统计功能的稳定性。 从图中可以看到,渠道量越大,统计效应就越明显,数据甚至可以准确到具体的手机机型、系统版本,并且全部可以免费排重,实现防刷量、防作弊。 在推广力度大、推广范围分散的情况下,还有个全国IP分布模型,能实时统计全国的用户数据,这个功能适合观察各区域用户的推广效果,针对线上广告的监测效果非常明显。 渠道打包只是一个方法,背后的数据和行为才是产品运营中真正需要挖掘的。openinstall既能满足渠道打包需求,又能实现数据统计监控,是目前市场上统计效果比较明显的工具。如果想要更多的推广服务,还可以在官网上了解openinstall的免填邀请码功能。 openinstall官网:www.openinstall.io

优秀的个人博客,低调大师

使用容器编排工具docker swarm安装clickhouse多机集群

1.首先需要安装docker最新版,docker 目前自带swarm容器编排工具 2.选中一台机器作为master,执行命令sudo docker swarm init [options] 3,再需要加入集群的集群上执行此命令 4.可以使用sudo docker node ls此命令来查询节点数 5编写docker-compose.yaml文件,目前我使用的是version 3版本,version2和3有区别,具体看官网介绍 贴一份完整的docker-compose.yaml供大家参考 version: '3' services: zookeeper: image: zookeeper ports: - "2181:2181" - "2182:2182" volumes: - "/data/clickhouse/zk/data:/data" - "/data/clickhouse/zk/log:/datalog" deploy: placement: constraints: - node.hostname == SHA11DMPHAMP01 # networks: # - clickhouse clickhouse203: image: yandex/clickhouse-server container_name: clickhouse203 expose: - "9000" - "8123" user: root privileged: true deploy: placement: constraints: - node.hostname == SHA11DMPHDOP01 ports: - "111.250.128.203:9000:9000" - "111.250.128.203:8123:8123" volumes: - "/data/clickhouse/etc:/etc/clickhouse-server" - "/data/clickhouse/data:/var/lib/clickhouse" - "/data/clickhouse/log:/var/log/clickhouse-server" ulimits: nofile: soft: 262144 hard: 262144 depends_on: - "zookeeper" # networks: # - clickhouse_network clickhouse204: image: yandex/clickhouse-server container_name: clickhouse204 expose: - "9000" - "8123" user: root privileged: true deploy: placement: constraints: - node.hostname == SHA11DMPHDOP02 ports: - "111.250.128.204:9001:9000" - "111.250.128.204:8124:8123" volumes: - "/data/clickhouse/etc:/etc/clickhouse-server" - "/data/clickhouse/data:/var/lib/clickhouse" - "/data/clickhouse/log:/var/log/clickhouse-server" ulimits: nofile: soft: 262144 hard: 262144 depends_on: - "zookeeper" # networks: # - clickhouse clickhouse205: image: yandex/clickhouse-server container_name: clickhouse205 expose: - "9000" - "8123" user: root privileged: true deploy: placement: constraints: - node.hostname == SHA11DMPHDOP03 ports: - "111.250.128.205:9002:9000" - "111.250.128.205:8125:8123" volumes: - "/data/clickhouse/etc:/etc/clickhouse-server" - "/data/clickhouse/data:/var/lib/clickhouse" - "/data/clickhouse/log:/var/log/clickhouse-server" ulimits: nofile: soft: 262144 hard: 262144 depends_on: - "zookeeper" # networks: # - clickhouse clickhouse206: image: yandex/clickhouse-server container_name: clickhouse206 expose: - "9000" - "8123" user: root privileged: true deploy: placement: constraints: - node.hostname == SHA11DMPHDOP04 ports: - "111.250.128.206:9003:9000" - "111.250.128.206:8126:8123" volumes: - "/data/clickhouse/etc:/etc/clickhouse-server" - "/data/clickhouse/data:/var/lib/clickhouse" - "/data/clickhouse/log:/var/log/clickhouse-server" ulimits: nofile: soft: 262144 hard: 262144 depends_on: - "zookeeper" # networks: # - clickhouse #networds: # clickhouse_network: docker-compose.yaml clickhouse的具体配置我就不介绍了,配置方面可以看我上一篇博客 希望大家尊重作者版权,未经允许不得转载,违者必究!!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册