我在尝试:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerArgument>-Werror</compilerArgument>
<fork>true</fork>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
但没有快乐.现在有什么想法可以在这篇博客文章中提出的这些错误中世纪 ?
有人能给我一个关于如何在分布式数据库中使用Paxos算法的真实示例吗?我已经阅读了许多关于Paxos的论文来解释算法,但没有一篇真正用实际例子来解释.
一个简单的例子可能是银行应用程序,其中一个帐户正在通过多个会话进行修改(即柜员存款,借记操作等).Paxos是否用于决定首先进行哪种操作?此外,Paxos协议的多个实例意味着什么?怎么用这个?基本上,我试图通过一个具体的例子而不是抽象的术语来理解这一切.
如果我有一个宏tranforms
代码如下:
(src: a.b.c.TestEntity) =>
{
z.y.TestTable(None)
}
Run Code Online (Sandbox Code Playgroud)
要匹配该AST的None部分,我可以使用提取器,例如:
object NoneExtractor {
def unapply(t: Tree): Boolean = t match {
case Select(Ident(scala), none) if scala.encoded == "scala" && none.encoded == "None" => true
case _ => false
}
}
Run Code Online (Sandbox Code Playgroud)
因为showRaw
AST的None部分看起来像:
Select(Ident(scala), None)
Run Code Online (Sandbox Code Playgroud)
然而,如果我想编写单元测试,NoneExtractor
我不想编译和重建宏,并在宏编译的项目中托管测试.我想在宏的项目中对提取器进行单元测试,这表明运行时反射是可行的方法:
val t = reify {
(src: a.b.c.TestEntity) =>
{
z.y.TestTable(None)
}
}.tree
Run Code Online (Sandbox Code Playgroud)
然而树是完全不同的,在showRaw
那棵树中看起来像是:
Ident(scala.None)
Run Code Online (Sandbox Code Playgroud)
这对于编写负面测试和检查宏的错误处理来说是个坏消息.您不能使用来自另一个项目的宏为宏编写负面测试,因为代码无法编译(并且您无法使用编译错误调试负面测试).
为什么在编译时反射和运行时反射之间,像None一样基本的表示形式如此不同?有没有办法在宏项目中创建可测试的树片段,这与在编译时反射期间传递给宏的AST相同?
使用Docker for Mac 1.13.1和以下Dockerfile:
FROM ubuntu:latest
MAINTAINER docker@ekito.fr
#Install packages and clean downloaded packages in the lowest layer
RUN apt-get update && apt-get -y install cron && rm -rf /var/lib/apt/lists/*
# Add crontab file in the cron directory
ADD crontab /etc/cron.d/hello-cron
# Give execution rights on the cron job and create the log file to tail in the next layer
RUN chmod 0644 /etc/cron.d/hello-cron && touch /var/log/cron.log
# Run the command on container startup
CMD echo "starting" && echo "continuing" …
Run Code Online (Sandbox Code Playgroud) 我正在考虑Cassandra集群的设计.
用例将为时间序列数据存储大量微小样本(使用KairosDB),数据几乎是不可变的(非常罕见的删除,没有更新).那部分工作得很好.
然而,几年后数据将非常大(考虑到复制因素,它将达到几百TB的最大大小 - 超过一PB).
我知道建议不要在每个Cassandra节点上使用超过5TB的数据,因为在压缩和修复期间I/O负载很高(显然旋转磁盘已经非常高).由于我们不想为这个用例构建一个包含数百个节点的整个数据中心,我正在调查是否可以在旋转磁盘上使用高密度服务器(例如,在RAID10中使用旋转磁盘,每个节点至少10TB或20TB或JBOD,服务器将具有良好的CPU和RAM,因此系统将受I/O限制).
每秒Cassandra的读/写量可以通过一个没有任何压力的小集群来管理.我还要提到的是,这不是一个高性能的事务系统,而是一个用于存储,检索和一些分析的数据存储,而且数据几乎是不可变的 - 所以即使压缩或修复/重建需要几天的几个服务器同时它可能根本不会成为一个问题.
我想知道是否有人对使用旋转磁盘的高服务器密度以及您正在使用的配置(Cassandra版本,每个节点的数据大小,每个节点的磁盘大小,磁盘配置:JBOD/RAID,硬件类型)有经验反馈.
提前感谢您的反馈.
最好的祝福.
Backgound:
在第3节,名为实施状态机,Lamport的论文Paxos Made Simple,Multi-Paxos被描述.Multi Paxos用于Google Paxos Made Live.(Multi-Paxos用于Apache ZooKeeper).在Multi-Paxos中,可能会出现差距:
通常,假设领导者可以
?
提前获得命令 - 也就是说,它可以在选择命令1到之后i + 1
通过i + ?
命令提出命令i
.? - 1
然后可能出现高达命令的差距.
现在考虑以下场景:
整个系统使用主从架构.只有主服务器提供客户端命令.Master和Slaves通过Multi-Paxos就命令序列达成共识.Master是Multi-Paxos实例的领导者.现在假设主服务器及其两个从服务器具有下图所示的状态(已选择命令):
.
请注意,主状态中存在多个间隙.由于不同步,这两个奴隶落后了.这时,主人失败了.
问题:
在检测到主设备故障后,从设备应该做什么(例如,通过心跳机制)?
特别是,如何处理与旧主人的差距和缺失的命令?
关于Zab的更新:
正如@sbridges指出的那样,ZooKeeper使用Zab而不是Paxos.报价,
Zab主要用于主备份(即主从)系统,如ZooKeeper,而不是用于状态机复制.
似乎Zab与我上面列出的问题密切相关.根据Zab的简短概述文件,Zab协议包括两种模式:恢复和广播.在恢复模式下,会做出两个特定的保证:永远不会忘记已提交的消息并放弃跳过的消息.我对Zab的困惑是:
- 在恢复模式下Zab是否也存在缺口问题?如果是这样,扎布做什么?
fault-tolerance distributed-computing paxos apache-zookeeper
我有一些工作杰克逊scala模块代码用于往返scala案例类.杰克逊在平面案例课程中工作得非常好,但是当我创建一个包含其他案例类别的列表时,我似乎需要的代码量很多.考虑:
abstract class Message
case class CardDrawn(player: Long, card: Int, mType: String = "CardDrawn") extends Message
case class CardSet(cards: List[CardDrawn], mType: String = "CardSet") extends Message
Run Code Online (Sandbox Code Playgroud)
为了让CardSet与jackson scala模块一起往返于json,我使用了一个用java编写的自定义序列化器/反序列化器:
object ScrumGameMashaller {
val mapper = new ObjectMapper()
val module = new SimpleModule("CustomSerializer")
module.addSerializer(classOf[CardSet], new CardSetSerializer)
module.addDeserializer(classOf[CardSet], new CardSetDeserializer)
val scalaModule = DefaultScalaModule
mapper.registerModule(scalaModule)
mapper.registerModule(module)
def jsonFrom(value: Any): String = {
import java.io.StringWriter
val writer = new StringWriter()
mapper.writeValue(writer, value)
writer.toString
}
private[this] def objectFrom[T: Manifest](value: String): T =
mapper.readValue(value, typeReference[T])
private[this] …
Run Code Online (Sandbox Code Playgroud) 我有一个的package.json是给出安全警告的负载。查看第一个关键项目,我看到它的open@0.0.5已经五年没有更新了。查看npm ll
它包含在npm@6.5.0 中,我使用的是大约两周前更新的最新版本。
我想删除不安全的依赖项。在 Java 世界中,maven 包管理器允许您排除某些传递依赖项。理想情况下,使用npm
或另一个节点包管理器,我应该能够排除具有漏洞的依赖项。然后我可以重新测试我的应用程序是否正常工作并且没有看到任何安全错误。有没有办法从我的 package.json 中快速排除任何有安全漏洞的东西?如果没有办法做到这一点,可以采取哪些方法来确保我的应用程序不使用不安全的包?
更新:虽然"npm": "^6.5.0"
在 package.json 中有指定,但我是用旧的 npm 构建它的,该 npm 解决了上面提到的关键问题。我解决了所有问题./node_modules/.bin/npm audit fix --force
我有一个scala宏,它输出嵌套的case类.我可以汇编使用reify创建的表达式片段,以编程方式构建嵌套的case类:
case class Foo(name: String)
case class Bar(foo: Foo)
def foo(name: String) = {
c.universe reify {
Foo(c.literal(name).splice)
}
}
def bar(foo: Expr[Foo]) = {
c.universe reify {
Bar(foo.splice)
}
}
// output Bar(Foo("MyFoo"))
c.Expr( bar(foo("MyFoo").asInstanceOf[Expr[Foo]]).tree )
Run Code Online (Sandbox Code Playgroud)
除了令人讨厌的演员之外,事情很有效(我怎么能解决这个问题?).我被困的地方是当我希望宏输出一些case类时,它需要一个内部对象的集合,其大小根据marco在AST处理的内容而变化.
所以,如果我有一个接受foo序列的类:
case class Baz(foos: Seq[Foo])
Run Code Online (Sandbox Code Playgroud)
我想做一些事情:
def baz(foos: Seq[Expr[Foo]]): Expr[Baz] = {
val flipped: Expr[Seq[Foo]] = ??? // convert foos from Seq[Expr[Foo]] to Expr[Seq[Foo]]
c.universe reify {
Baz(flipped.splice)
}
}
// now pack any number of Foos into an output Baz as …
Run Code Online (Sandbox Code Playgroud) https://github.com/gothinkster/react-redux-realworld-example-app上的react redux realworld.io应用程序的自述文件说要编辑以src/agent.js
将其更改API_ROOT
为指向不同的后端api实例.我们想要进行设置,以便API_ROOT
可以通过在我们运行生产构建的多个环境(例如,"staging"和"live")中不同的环境变量来定义.
我们按照12factor.net原则在openshift kubernetes上运行容器,其中代码构建一次,然后通过环境进行推广.我们可以使用单个命令启动新环境,因此我们不希望在代码中有一个switch语句来命名每个环境,并且硬编码每个环境的后端API_ROOT
.相反,我希望能够使用环境变量在新环境中运行现有生产构建容器映像,将其更改API_ROOT
为指向我们要测试的正确后端API.
我查看了许多不同的博客,stackoverflow答案和官方文档.主要问题是典型的解决方案process.env.API_ROOT
在构建时"烘焙" 环境变量,否则就会有一个开关,将所有环境的细节硬编码到代码中.这两者都不令人满意,因为我们希望能够在现有容器中获取最新的稳定代码,并使用在那里运行的API在新环境中运行它.
到目前为止,我最接近的是编辑代码以将其呈现process.env.API_ROOT
为将<script>
其设置在window.API_ROOT
变量上的标记.然后检查是否存在其他在为API_ROOT定义const时使用默认值.这感觉非常具有侵略性,有点脆弱,我不清楚在示例应用程序中在哪里提供这样的脚本标记的最佳位置https://github.com/gothinkster/react-redux-realworld-example-app
scala ×3
paxos ×2
scala-macros ×2
12factor ×1
algorithm ×1
build ×1
cassandra ×1
consensus ×1
distributed ×1
docker ×1
dockerfile ×1
jackson ×1
java ×1
jerkson ×1
lint ×1
maven ×1
node.js ×1
npm ×1
package.json ×1
react-redux ×1
reactjs ×1
scala-2.10 ×1