我试图了解Gradle Wrapper的工作原理.在许多源代码库中,我看到以下结构:
projectRoot/
src/
build.gradle
gradle.properties
settings.gradle
gradlew
gradlew.bat
gradle/
wrapper/
gradle-wrapper.jar
gradle-wrapper.properties
Run Code Online (Sandbox Code Playgroud)
我的问题:
gradlew/ gradlew.bat?您是否应该在项目首次创建时仅生成一次,每次提交/推送更改时是否生成它们?它们是如何产生的?gradle/wrapper/*文件(gradle-wrapper.jar和gradle-wrapper.properties)?*.gradle在项目gradle目录中看到其他文件.这些额外的Gradle文件是什么?它们代表什么/做什么?自定义插件?settings.gradle与内部应该定义的属性有什么不同gradle.properties?我是Docker的新手,我试图准确理解Docker 图像是什么.Docker镜像的每个定义都使用术语"图层",但似乎并未定义图层的含义.
从官方Docker文档:
我们已经看到Docker镜像是从中启动Docker容器的只读模板.每个图像由一系列图层组成.Docker利用联合文件系统将这些层组合成一个图像.联合文件系统允许透明地覆盖单独文件系统的文件和目录(称为分支),形成单个连贯的文件系统.
所以我问,什么是一层(确切地说); 有人能给出一些具体的例子吗?这些图层如何"拼合"形成图像?
Kubernetes被称为容器集群"scheduler/orchestrator",但我不知道这意味着什么.在阅读了Kubernetes网站和(模糊的)GitHub wiki之后,我能说的最好的是它以某种方式确定哪些虚拟机可用/能够运行你的Docker容器,然后在那里部署它们.但这只是我的猜测,我没有在他们的文档中看到任何支持这一点的具体措辞.
那么,什么是Kubernetes,准确,并有一些什么具体的,它解决的问题?
根据Ansible文档,Playbook 是:
...真正简单的配置管理和多机器部署系统的基础,与已有的系统不同,非常适合部署复杂的应用程序.
而且,根据那些相同的文档,角色 是:
...基于已知文件结构自动加载某些vars_files,任务和处理程序的方法.按角色对内容进行分组还可以轻松与其他用户共享角色.
但是,这些与不同用例之间的区别对我来说并不是很明显.例如,如果我将我的/etc/ansible/hosts文件配置为:
[databases]
mydb01.example.org
mydb02.example.org
[mail_servers]
mymail01.example.org
mymail_dr.example.org
Run Code Online (Sandbox Code Playgroud)
......那么这个" [databases]"条目是什么......一个角色?或者某个剧本YAML文件的名称?或者是其他东西?!?
如果有人可以向我解释这些差异,我对Ansible的理解会大大提升!
[databases]和类似的条目/etc/ansible/hostsansible.cfgAnsible服务器上的生活,如何使用可用的Playbooks/Roles添加/配置Ansible?例如,当我跑步时ansible-playbook someplaybook.yaml,Ansible如何知道在哪里找到该剧本?我的理解是所有Bootstrap样式元素必须存在于<div class="container">元素内.但有时我会看到Bootstrap示例中有多个"容器":
<div class="container">
<!-- Blah, GUI stuff, blah -->
</div>
...
<div class="container">
<!-- Blah, more GUI stuff, blah -->
</div>
Run Code Online (Sandbox Code Playgroud)
我的问题:
我刚读了一篇关于微服务和PaaS架构的文章.在那篇文章中,大约三分之一的时间,作者说(在像Denzy的Denormalize下):
重构数据库模式,并对所有内容进行反规范化,以实现数据的完全分离和分区.也就是说,不要使用提供多个微服务的基础表.不应共享跨多个微服务的基础表,也不应共享数据.相反,如果多个服务需要访问相同的数据,则应通过服务API(例如已发布的REST或消息服务接口)共享它.
虽然这在理论上听起来很棒,但在实践中它还有一些需要克服的严重障碍.其中最大的一点是,数据库经常紧密耦合,每个表与至少一个其他表有一些外键关系.因此它可能是不可能的分区的数据库进Ñ通过控制子数据库Ñ微服务.
所以我要问:给定一个完全由相关表组成的数据库,如何将其归一化为较小的片段(表组),以便片段可以由单独的微服务控制?
例如,给定以下(相当小但是示例性)数据库:
[users] table
=============
user_id
user_first_name
user_last_name
user_email
[products] table
================
product_id
product_name
product_description
product_unit_price
[orders] table
==============
order_id
order_datetime
user_id
[products_x_orders] table (for line items in the order)
=======================================================
products_x_orders_id
product_id
order_id
quantity_ordered
Run Code Online (Sandbox Code Playgroud)
不要花太多时间批评我的设计,我在飞行中做了这个.关键是,对我来说,将这个数据库分成3个微服务是合乎逻辑的:
UserService - 用于系统中的CRUDding用户; 应该最终管理[users]桌子; 和ProductService - 用于系统中的CRUDding产品; 应该最终管理[products]桌子; 和OrderService - 用于系统中的CRUDding订单; 应该最终管理[orders]和[products_x_orders]表但是,所有这些表都具有彼此的外键关系.如果我们将它们归一化并将它们视为整体,它们就会失去所有的语义:
[users] table
=============
user_id
user_first_name …Run Code Online (Sandbox Code Playgroud) 我学习的DropWizard指标库(原科达硬朗指标),我很困惑,当我应该使用到MetersVS Timers.根据文件:
仪表:仪表测量一组事件发生的速率
和:
计时器:计时器基本上是事件类型持续时间的直方图和其发生率的计量表
基于这些定义,我无法辨别它们之间的区别.令我感到困惑的是,Timer没有像我期望的那样使用它.对我而言,Timer就是这样:一个计时器; 它应该测量a start()和之间的时间差stop().但似乎Timers也可以捕捉事件发生的速度,感觉就像是踩到了Meters脚趾.
如果我能看到每个组件输出的示例,这可能有助于我理解何时/何处使用其中任何一个.
我听说Groovy有一个内置的REST/HTTP客户端.我能找到的唯一的库是HttpBuilder,是这样的吗?
基本上我正在寻找一种从Groovy代码中执行HTTP GET的方法,而无需导入任何库(如果可能的话).但由于这个模块似乎不是核心Groovy的一部分,我不确定我是否在这里有正确的库.
所有的例子的卡夫卡 | 生产者显示ProducerRecord的键/值对不仅是相同的类型(所有示例都显示<String,String>),而是相同的值.例如:
producer.send(new ProducerRecord<String, String>("someTopic", Integer.toString(i), Integer.toString(i)));
Run Code Online (Sandbox Code Playgroud)
但是在Kafka文档中,我似乎无法找到解释键/值概念(及其基本目的/效用)的位置.在传统的消息传递(ActiveMQ,RabbitMQ等)中,我总是在特定的主题/队列/交换中发出消息.但Kafka是第一个似乎需要键/值对的代理,而不仅仅是一个正常的'字符串消息.
所以我问:要求生产者发送KV对的目的/用途是什么?
messaging message-queue key-value messagebroker apache-kafka
我试图围绕Apache Mesos,并需要澄清一些项目.
我对 Mesos的理解是它是一个可执行文件,安装在集群中的每个物理/ VM服务器(" 节点 ")上,然后提供一个Java API(不知何故)将每个单独的节点视为一个集合的计算资源池( CPU/RAM /等).因此,对于使用Java API编码的程序,它们只能看到一组资源,而不必担心代码的部署方式/位置.
所以对于一个人来说,我在这里的理解可能是根本错误的(在这种情况下,请纠正我!).但是如果我是目标,那么Java API(由Mesos提供)如何允许Java客户端利用这些资源?!?有人可以举一个Mesos的具体例子吗?
看看下面我可怕的图画.如果我正确理解Mesos架构,我们就拥有一个由3个物理服务器组成的集群(phys01,phys02和phys03).这些物理中的每一个都在运行Ubuntu主机(或其他).通过虚拟机管理程序,比如Xen,我们可以运行1+个虚拟机.
我对Docker和CoreOS感兴趣,所以我将在这个例子中使用它们,但我猜这同样适用于其他非容器设置.
所以在每个VM上我们都有CoreOS.在每个CoreOS实例上运行的是Mesos可执行文件/服务器.集群中的所有Mesos节点都将其下面的所有内容视为单个资源池,并且可以将工件任意部署到Mesos集群,并且Mesos将确定实际部署它们的CoreOS实例.
运行在Mesos之上的是一个"Mesos框架",如Marathon或Kubernetes.在Kubernetes中运行的是各种Docker容器(C1- C4).

对Mesos的这种理解或多或少是正确的吗?
docker ×2
java ×2
ansible ×1
apache-kafka ×1
build.gradle ×1
css ×1
database ×1
dropwizard ×1
gradle ×1
gradlew ×1
groovy ×1
httpbuilder ×1
iaas ×1
key-value ×1
kubernetes ×1
mesos ×1
messaging ×1
metrics ×1
rest ×1
timer ×1