我对整个无服务器环境都很陌生,而且我正试图在使用Fargate和Lambda时解决这个问题.
我知道Fargate是ECS的无服务器子集,Lambda也是无服务器的,但是由事件驱动.但我希望能够以简单的方式向其他熟悉容器的人解释这两种范例,而不是那些使用AWS和无服务器的人.
目前,我们有几个物理服务器负责接收文本文件,解析它们,并用结果填充几个数据库表.根据我的理解,我认为这将是一个更适合Lambda的用例,因为解析文本文件的过程是由计划触发的,不会长时间运行,并且在不使用时会减少.
但是,如果我们要移植一个接收API调用的服务器,我们可能会想要使用Fargate,因为我们总是需要至少一个映像实例启动并运行.
就容器而言,如果容器的设计是这样设计的话,可以安全地说:
docker run <some_input>
Run Code Online (Sandbox Code Playgroud)
然后这是Lambda的工作.
但是,如果容器设计为执行以下操作:
docker run --expose 80
Run Code Online (Sandbox Code Playgroud)
然后这是Fargate的工作.
这是一个很好的比喻吗?
我目前正在将业务逻辑从控制器方法转移到服务,当时我摔倒了grails服务的兔子洞.我的服务中有以下方法:
Job closeJobOpportunity(Job op, Employee res) {
op.chosenOne = res
op.requisitionCanceledDate = new Date()
if(!op.chosenOne || !op.hrEffectiveDate){
return null
}
else if(StringUtils.isEmpty(op.chosenOne.id)){
return null
}
return op
}
Run Code Online (Sandbox Code Playgroud)
我开始考虑这种方法可能导致同步问题的不同方式(因为grails使服务成为单例),并注意到grails文档提到只要不存储状态,就应该将业务逻辑放入服务中.
听到无知或不知情的风险,有人可以简单地提供Grails中有状态和无状态服务之间的差异吗?以上方法是有状态的吗?它应该被控制器中的try catch包围吗?
我正在尝试从大约20,000列宽和700行深的现有csv文件创建数据库.在grails中,我希望20,000列域属于另一个更简单的域(大约200列).但在编译后,我得到:
java.lang.RuntimeException: Class file too large!
Run Code Online (Sandbox Code Playgroud)
这是可以理解的,因为它的数据太多了.我的问题是,在grails中处理这个问题的最佳方法是什么?我应该简单地将大表分成不同的域吗?寻找不同的表格式?
我特别担心:
1)搜索时间,解析搜索方法,然后委托子域.
2)将巨大的csv文件中的数据导入域中.
我试图将文件的内容放入一个数组中以进行grepping,但由于某种原因,当我传递'+ >>'参数时它没有这样做.但是,当我使用不同的参数打开同一个文件的两个单独的文件句柄时,它可以工作
这有效:
open( FILEHANDLE, '<', $file ) or $file_not_found = 1;
open( APPENDFH, '>>', $file );
my @file_list = <FILEHANDLE>;
print("This is my file list @file_list \n");
Run Code Online (Sandbox Code Playgroud)
打印:
This is my file list 2015-11-06 11:17:57Example
Run Code Online (Sandbox Code Playgroud)
这不是:
open( FILEHANDLE, '+>>', $file ) or $file_not_found = 1;
my @file_list = <FILEHANDLE>;
print("This is my file list @file_list \n");
Run Code Online (Sandbox Code Playgroud)
打印:
This is my file list
Run Code Online (Sandbox Code Playgroud) 我有这个非常简单的代码片段:
static String getInput() throws IOException{
if(in.ready()){
return in.readLine().trim();
}
System.err.println("Please provide more input in order to execute the program.");
System.exit(0);
return "";
}
Run Code Online (Sandbox Code Playgroud)
据我所知,JVM没有可能在代码末尾执行return语句.但如果我评论这一行,java会抱怨缺少return语句.为什么JVM不能识别System.exit(0)不允许执行任何其他代码,但如果返回不允许执行代码,则会抱怨无法访问的语句?我认为最后的return语句是多余的,可能会让其他开发者感到困惑,为什么java不让我摆脱它呢?
我正在运行一个聚类算法,它聚集了双打集合的集合.但是一旦完成聚类,我想知道每个Double属于哪个父类.
class PatientMRNA {
Patient patient
MRNA mrna
Double value
}
Run Code Online (Sandbox Code Playgroud)
我使用hql查询数据库,并将PatientMRNA表中的选定值放入Collection中,如下所示:
[[x11,x12...x1m],[x21,x22...x2m]...[xn1, xn2, xnm]]
Run Code Online (Sandbox Code Playgroud)
这个集合通过一个非常好的算法聚集在这里:https://coviello.wordpress.com/2013/03/30/learning-functional-programming-ak-means-implementation-in-groovy/
完成聚类后,我们的结果如下:
[[centroid]: [[x?1, x?2...x?m],[x?1,x?2...x?m]...[x?1,x?2...x?m]] [centroid2]: [[],[]...[]]
Run Code Online (Sandbox Code Playgroud)
其中每个x阵列(属于患者)值是随机分配的,具体取决于它所分配的簇.
我的问题是:有没有办法在Groovy中扩展Double类,以便它还具有PatientId属性?或者我应该以其他方式看待这个问题吗?
grails ×2
groovy ×2
amazon-ecs ×1
aws-fargate ×1
aws-lambda ×1
bigdata ×1
csv ×1
java ×1
jvm ×1
perl ×1
serverless ×1
service ×1